2013-04-04 87 views
5

我嘗試編譯剃刀文件,該行RazorEngine解析拋出無法編譯

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

,但它只是拋出

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."} 

和錯誤性質是這樣的:

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

所以沒有好的信息。

我運行.NET 4.0和剃刀引擎3.2.0.0

更新1

我已經找到錯誤該線路RazorEngine

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

請檢查http://stackoverflow.com/questions/6444277/using-razorengine-to-parse-razor:

這也可以在PowerShell中完成運行以下(以管理員身份運行) -templates-同時 – Amit 2013-04-04 08:37:11

+0

@AmitAgrawal謝謝,但這篇文章是關於線程安全性的。我現在只有一個線程處於活動狀態。 – 2013-04-04 08:41:04

回答

8

這是最有可能的一個用戶帳戶編譯剃鬚刀文件的權限問題。 確保它有所有,但基於C的完全控制權限:\ WINDOWS \ TEMP

在這裏看到的背景資料: http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/85f9b330-a938-4afe-a615-db83085e52d2/

+1

有沒有辦法設置它用於別的東西的臨時目錄?如果我不想給用戶帳戶「除控制權限外的所有內容」,則視窗溫度... – crush 2015-02-17 22:00:25

+0

@crush請參閱下面的guerillapresident的答案,它顯示瞭如何完成此操作。這應該是這裏的首選方法,對系統卷文件夾授予「除完全許可外的所有權限」絕對不是最佳做法。 – 2015-02-27 15:21:45

+1

@OskarAustegard這是我想出的同樣的解決方案。我擔心是否有任何啓用加載用戶配置文件的性能影響,但似乎沒有。 – crush 2015-02-27 16:00:00

6

阿德里安的答案引導我走向了一些研究,爲什麼C:\ WINDOWS \ TEMP會首先需要/使用。事實證明,這個目錄的使用與我爲應用程序創建的IIS應用程序池直接相關。我使用的池具有「加載用戶配置文件」設置爲False。事實證明,默認情況下,此屬性設置爲False僅僅是爲了保持向後兼容設計爲在IIS 6上運行的應用程序(在加載配置文件選項存在之前) - 並且兼容性問題與這些應用程序利用%temp%目錄。根據微軟的說法,雖然這是默認設置,但將其設置爲False並不是首選。

相反,此設置應該設置爲True,這樣做會爲運行應用程序池的用戶配置文件下的應用程序提供%temp%目錄。這樣做可以緩解更改系統卷權限的需要。

此設置可通過AppPool的IIS管理器的高級設置進行訪問。

Import-Module WebAdministration 
$appPoolName = "ReplaceWithYourAppPoolName" 
$appPool = Get-Item IIS:\AppPools\$appPoolName 
$appPool.processModel.loadUserProfile = $true 
$appPool | Set-Item 
相關問題