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

我正在运行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,只是为了看看是否能够找出阻止这种情况发生的原因。 我现在的想法很新鲜。 有人有什么建议吗?

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

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

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

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

对于那些像我一样在这里看到的人,如果接受的答案无法解决问题,您可以尝试阅读本文: 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的系统临时文件夹。

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

在Windows 8 / Server 2012上,不再支持aspnet_regiis。 我尝试使用Windowsfunction重新安装:失败。 我尝试重新安装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 

有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 

解决了错误

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

这个KB为我解决了它,看起来OS环境变量中不存在临时文件路径。

http://support.microsoft.com/kb/825791

我授予IIS_WPG组对C:\ Windows \ Temp的读写权限。 这对我有用。 我在Server 2003 R2和IIS 6上,组名称不同。 我来自http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis/ ,它说:

•IUSR内置帐户取代了IUSR_MachineName帐户。

•IIS_IUSRS内置组替换IIS_WPG组。

感谢Dommer建议使用windows temp文件夹,感谢zcrar70提供了很好的夏日和详细描述的链接。

对我来说,解决方案是这里描述的修复的组合。 我不得不给NETWORK_SERVICE帐户完全控制权

C:\ WINDOWS \ TEMP

C:\ Windows \ Microsoft.NET \ Framework [相关框架] \临时ASP.NET文件\

并将应用程序池标识更改为NetworkService。

另外,在完全控制Temp文件夹上的NETWORK_SERVICE后,不要忘记重新启动IIS

有时,Temp文件可能被工作站中的其他进程锁定。 首先,请重新启动工作站并检查应用程序。

在Windows 8上,对我来说绝对没有用。 有一天,应用程序池突然决定他们不再希望在NetworkService帐户下工作。

我通过将应用程序池更改为在我自己的用户帐户下工作来解决问题。 我知道这不是一个很好的解决方案,但它有效。

当我使用bat文件删除临时文件时会发生此错误。 它可能删除了目录本身,并且给定的权限消失了。 所以你必须以某种方式恢复它们。

最简单的方法是为Everyone授予对以下目录的完全控制权:

C:\ WINDOWS \ TEMP

C:\ Windows \ Microsoft.NET \ Framework [相关框架] \临时ASP.NET文件\

我有权限,但我开始得到这个错误。 “重启机器”对我有用

我在使用asp.net core 2.0开发web api时遇到了同样的错误,并在重启机器后得到了解决。