RazorEngine解析抛出无法编译

本文关键字:编译 RazorEngine | 更新日期: 2023-09-27 18:07:32

我试图用这一行编译一个razor文件

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

error属性是这样的

[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);

RazorEngine解析抛出无法编译

这很可能是编译razor文件的用户帐户的权限问题。确保它在C:'Windows'Temp

上具有完全控制权限

查看背景信息:http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/85f9b330-a938-4afe-a615-db83085e52d2/

Adrian的回答引导我对为什么c:'windows'temp首先需要/使用的一些研究。事实证明,这个目录的使用与我为应用程序创建的IIS应用程序池直接相关。我使用的池将"加载用户配置文件"设置为False。事实证明,这个属性默认设置为False仅仅是为了保留设计用于在IIS 6上运行的应用程序的向后兼容性(在加载配置文件选项存在之前)——并且兼容性问题与这些应用程序利用%temp%目录的情况隔离开来。虽然这是默认设置,但根据微软的建议,将其设置为False并不是首选的做法。

相反,此设置应设置为True,这样将在运行应用程序池的用户配置文件下为应用程序提供一个%temp%目录。这样做可以减少更改系统卷权限的需要。

此设置可在IIS管理器中的AppPool的高级设置中访问。

这也可以在powershell中(以管理员身份运行)通过运行以下命令来完成:

Import-Module WebAdministration
$appPoolName = "ReplaceWithYourAppPoolName"
$appPool = Get-Item IIS:'AppPools'$appPoolName
$appPool.processModel.loadUserProfile = $true
$appPool | Set-Item