我正在尝试使用此行编译剃刀文件
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和Razor Engine 3.2.0.0
我已将错误定位到RazorEngine
中的这一行Tuple.Create(
compileResult.CompiledAssembly.GetType("CompiledRazorTemplates.Dynamic." + context.ClassName),
compileResult.CompiledAssembly);
答案 0 :(得分:8)
这很可能是编译剃刀文件的用户帐户的权限问题。 确保它在C:\ Windows \ Temp
上具有除完全控制权限之外的所有权限请参阅此处获取背景信息: http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/85f9b330-a938-4afe-a615-db83085e52d2/
答案 1 :(得分:6)
Adrian的回答引导我进行一些研究,了解为什么首先需要/使用c:\ windows \ temp。事实证明,这个目录的使用与我为应用程序创建的IIS应用程序池直接相关。我使用的池将“加载用户配置文件”设置设置为False。事实证明,默认情况下,此属性设置为False,只是为了保留设计为在IIS 6上运行的应用程序(在加载配置文件选项存在之前)的向后兼容性 - 并且兼容性问题与这些应用程序利用%temp%的情况隔离开来目录。虽然这是默认设置,但根据Microsoft的说法,将其设置为False不是首选做法。
相反,此设置应设置为True,这样做会为应用程序提供运行应用程序池的用户配置文件下的%temp%目录。这样做可以减少更改系统卷权限的需要。
可以在IIS管理器的AppPool高级设置中访问此设置。
这也可以通过运行以下命令在powershell(以管理员身份运行)中完成:
Import-Module WebAdministration
$appPoolName = "ReplaceWithYourAppPoolName"
$appPool = Get-Item IIS:\AppPools\$appPoolName
$appPool.processModel.loadUserProfile = $true
$appPool | Set-Item