2013-04-04 12 views
5

Próbuję skompilować plik z ostrzami z tej liniiRazorEngine parse rzuca Nie można skompilować

RazorEngine.Razor.Parse("Hello world"); 

Ale to po prostu rzuca

base {System.Exception} = {"Unable to compile template. Source file 'C:\\Windows\\TEMP\\vlu4zahf.0.cs' could not be found\n\nOther compilation errors may have occurred. Check the Errors property for more information."} 

a właściwość błąd wygląda tak:

[0] = {error CS2001: Source file 'C:\Windows\TEMP\vlu4zahf.0.cs' could not be found} 
[1] = {warning CS2008: No source files specified} 

Więc nie ma dobrych informacji.

biegnę .NET 4.0 i Razor silnika 3.2.0.0

Update 1

ja się błąd na tej linii w RazorEngine

Tuple.Create(
       compileResult.CompiledAssembly.GetType("CompiledRazorTemplates.Dynamic." + context.ClassName), 
       compileResult.CompiledAssembly); 
+0

Proszę sprawdzić http://stackoverflow.com/questions/6444277/using-razorengine-to-parse-razor -templates-while – Amit

+0

@AmitAgrawal Dzięki, ale post dotyczy bezpieczeństwa nici. W tej chwili mam tylko jeden wątek aktywny. –

Odpowiedz

8

Jest to najprawdopodobniej problem uprawnień dla konta użytkownika kompilującego plik maszynki do golenia. Upewnij się, że ma wszystko, ale pełna zgoda kontrola na C: \ Windows \ Temp

Zobacz tutaj po informacje tła: http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/85f9b330-a938-4afe-a615-db83085e52d2/

+1

Czy nie ma sposobu, aby ustawić katalog tymczasowy, którego używa do czegoś innego? Co się stanie, jeśli nie chcę nadać kontu użytkownika "uprawnienia z wyjątkiem pełnego uprawnienia" do windows temp ... – crush

+0

@crush zobacz poniżej odpowiedź guerillapresident, która pokazuje, jak to zrobić. To powinno być preferowane podejście, przyznając "pełne, ale pełne pozwolenie" do folderu woluminu systemowego, zdecydowanie * nie * jest najlepszą praktyką. –

+1

@OskarAustegard To jest to samo rozwiązanie, które wymyśliłem. Byłem zaniepokojony, jeśli wystąpiły jakiekolwiek konsekwencje związane z wydajnością, umożliwiające włączenie profilu użytkownika, ale wydaje się, że tak się nie dzieje. – crush

6

odpowiedź Adriana kierując mnie do niektórych badań, dlaczego C: \ Windows \ Temp będzie być potrzebnym/wykorzystanym w pierwszej kolejności. Okazuje się, że użycie tego katalogu jest bezpośrednio związane z pulą aplikacji IIS, którą utworzyłem dla aplikacji. Pula, z której korzystałem, miała ustawienie "Załaduj profil użytkownika" na wartość Fałsz. Okazuje się, że ten atrybut ma domyślnie wartość Fałsz tylko dla zachowania kompatybilności wstecznej dla aplikacji zaprojektowanych do uruchamiania w usługach IIS 6 (zanim istniała opcja profilu obciążenia) - a problem zgodności jest ograniczony do przypadków, w których takie aplikacje wykorzystują% temp% informator. Mimo że jest to ustawienie domyślne, ustawienie opcji False nie jest preferowaną praktyką według firmy Microsoft.

Wręcz przeciwnie, to ustawienie powinno mieć wartość True, a spowoduje to podanie aplikacji z katalogu% temp% w profilu użytkownika, który uruchamia pulę aplikacji. Takie postępowanie ogranicza konieczność zmiany uprawnień woluminu systemowego.

To ustawienie jest dostępne w zaawansowanych ustawieniach AppPool w Menedżerze usług IIS.

ten może być również realizowane w PowerShell (uruchom jako administrator), uruchamiając następujące:

Import-Module WebAdministration 
$appPoolName = "ReplaceWithYourAppPoolName" 
$appPool = Get-Item IIS:\AppPools\$appPoolName 
$appPool.processModel.loadUserProfile = $true 
$appPool | Set-Item 
Powiązane problemy