C# 在IIS下找不到CSharpCodeProvider CompileAssemblyFromSource文件
我们的网站根据配置编译从数据库加载的自定义c#代码。在我们的一台开发人员机器上,我们在编译时遇到一个“未找到文件”错误。此代码在其他开发人员机器上运行良好。在开发人员计算机上的VisualStudio开发服务器下运行时,它也可以正常工作。在此特定计算机上在IIS下运行时,它不起作用。以前,当网站安装在默认网站的子目录下时,它可以工作,但自从移动到IIS中的单独网站后,它就不工作了C# 在IIS下找不到CSharpCodeProvider CompileAssemblyFromSource文件,c#,asp.net,iis,dynamic,compilation,C#,Asp.net,Iis,Dynamic,Compilation,我们的网站根据配置编译从数据库加载的自定义c#代码。在我们的一台开发人员机器上,我们在编译时遇到一个“未找到文件”错误。此代码在其他开发人员机器上运行良好。在开发人员计算机上的VisualStudio开发服务器下运行时,它也可以正常工作。在此特定计算机上在IIS下运行时,它不起作用。以前,当网站安装在默认网站的子目录下时,它可以工作,但自从移动到IIS中的单独网站后,它就不工作了 CompilerResults results = compiler.CompileAssemblyFromSour
CompilerResults results = compiler.CompileAssemblyFromSource(
compilerParameters, source);
if (results != null && results.Errors.HasErrors)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (CompilerError error in results.Errors)
{
stringBuilder.AppendLine(error.ErrorText);
}
throw new StoreTechException(
String.Format("Unable to generate KPI calculation assembly:{0}{1}",
Environment.NewLine, stringBuilder.ToString()),
StoreTechExceptionTypes.Error);
}
return results;
生成的错误消息包括:
CS2001: Source file 'C:\\Windows\\TEMP\\zyxl54ci.0.cs' could not be found
CS2008: No inputs specified
由于它在Visual Studio开发服务器下工作,而不是在IIS下工作,我们想知道这是否是一个权限问题。应用程序池标识需要对临时目录(C:\Windows\temp)进行写访问。什么版本的Windows/IIS?您站点的池帐户以什么身份运行?@Kev Windows 7 Professional。IIS 7.5。我需要等到星期二才能肯定地回答第二个问题,下次我什么时候见开发人员。除了将应用程序池设置为.NET 4.0之外,我不知道应用程序池做了什么不寻常的事情,所以它可能是默认值。我收到了相同的错误消息。在我的例子中,应用程序池标识没有足够的权限。@lippo启用代码编译需要哪些特定权限?我选择了一种简单的方法。我已将应用程序池用户添加到管理员组。但我认为用户只需要对temp dir拥有写权限。