在IIS 7中启动应用程序时出现"CS0016:无法写入输出文件"错误

jas*_*nac 16 c# iis permissions wcf iis-7

我正在运行Windows 7,并且通常不是此设置中的开发人员,并且最近在C#中构建了WCF Rest服务,我现在正尝试在本地计算机上部署到IIS.经过多次争论,我设置了应用程序,但是当我导航到应用程序时,我收到一条错误消息:编译错误

描述:编译服务此请求所需的资源时发生错误.请查看以下特定错误详细信息并相应地修改源代码.

编译器错误消息:CS0016:无法写入输出文件'c:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\scom_sibyll\8c0b945e\9329016\App_global.asax.eagmqgcd.dll' - '访问被拒绝."

我尽最大努力搜索网络,并更改了Temporary ASP.NET Files fodler的权限,以允许网络服务帐户拥有完整权限,并对Temp文件夹执行相同操作.它在失败之前复制了许多文件,因此它可能具有写入权限,因此我检查了从源文件夹中读取的权限,这也是有效的.我还注意到它在尝试缓存DLL文件时出现问题,并尝试关闭我的防病毒保护,以及关闭UAC,只是为了看看是否能够找出阻止这种情况发生的原因.我现在的想法很新鲜.有人有什么建议吗?

zcr*_*r70 49

对于那些像我一样在这里看到的人,如果接受的答案无法解决问题,您可以尝试阅读本文:http://lordzoltan.blogspot.com/2011/02/aspnet-2-and-4-default-application -pool.html

总之,当应用程序池用户无权访问%TMP%/%TEMP%文件夹时,似乎有时会显示相同的错误.

您需要授予IIS_IUSRS读取和修改对运行应用程序池的用户的临时文件夹访问权限.

这可以是应用程序池用户的配置文件中的临时文件夹,例如c:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp,或者是系统临时文件夹c:\windows\temp.

设置这个解决了我的问题.

  • +1授予对"C:\ Windows\Temp"的访问权限似乎为我解决了这个问题(尽管错误信息恰恰相反).谢谢! (11认同)
  • 授予对c:\ windows\temp的访问权限也适用于我. (3认同)

Mat*_*ttC 11

听起来像运行WCF服务的帐户无权写入"Temporary ASP.NET Files"目录.

您也可以尝试重新运行regiis.

%windir%\ Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -i

ASP.NET IIS注册工具(Aspnet_regiis.exe)


Dan*_*con 7

在Windows 8/Server 2012上,不再支持aspnet_regiis.我尝试使用Windows功能重新安装:失败.我尝试重新安装IIS:失败.我尝试通过WebPI重新安装:失败.

我通过在Windows Temp Directory上设置ACL来解决了这个问题.

这是一个执行工作的powershell:

$dir = "C:\Windows\Temp"
$acl = get-acl -path $dir
$new = "IIS_IUSRS","Modify","ContainerInherit,ObjectInherit","None","Allow"
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $new
$acl.SetAccessRule($accessRule)
$acl | Set-Acl $dir
Run Code Online (Sandbox Code Playgroud)


小智 5

要做的有3个步骤:

1 - check if "Application Pool Identity" is NetworkService

2 - NETWORK_SERVICE account needs full control on:
    . C:\Windows\Temp
    . C:\Windows\Microsoft.NET\Framework[related framework]\Temporary ASP.NET Files\

3 - restart the IIS
Run Code Online (Sandbox Code Playgroud)

解决了错误

您也可以尝试重新运行regiis."%windir%\ Microsoft.NET\Framework [相关框架]\aspnet_regiis -i"