2013-04-04 89 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 
相关问题