5

我正在尝试用这一行编译一个剃须刀文件

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

更新 1

我在 RazorEngine 中找到了这一行的错误

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

2 回答 2

8

这很可能是编译剃刀文件的用户帐户的权限问题。确保它对 C:\Windows\Temp 具有完全控制权限

有关背景信息,请参见此处:http: //social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/85f9b330-a938-4afe-a615-db83085e52d2/

于 2013-04-16T06:40:41.713 回答
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
于 2015-02-27T03:37:17.703 回答