我正在运行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,只是为了看看是否能够找出阻止这种情况发生的原因。我现在的想法很新鲜。有人有什么建议吗?
答案 0 :(得分:48)
对于那些像我一样在这里看到的人,如果接受的答案没有解决问题,您可以尝试遵循这篇文章: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 :(得分:10)
听起来运行WCF服务的帐户无法写入“Temporary ASP.NET Files”目录。
你也可以尝试重新运行regiis。
%windir%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis -i
答案 2 :(得分: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
答案 3 :(得分: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
解决了错误
你也可以尝试重新运行regiis。 "%windir%\ Microsoft.NET \ Framework [相关框架] \ aspnet_regiis -i"
答案 4 :(得分:2)
这个KB为我解决了它,看起来OS环境变量中不存在临时文件路径。
答案 5 :(得分:1)
我授予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提供了很好的夏日和一个详细描述的链接。
答案 6 :(得分:1)
对我来说,解决方案是这里描述的修复的组合。我必须给NETWORK_SERVICE帐户完全控制
C:\的Windows \温度
和
C:\ Windows \ Microsoft.NET \ Framework [相关框架] \ Temporary ASP.NET Files \
并将应用程序池标识更改为NetworkService。
另外,在完全控制Temp文件夹上的NETWORK_SERVICE后,不要忘记重启IIS
答案 7 :(得分:1)
我在使用asp.net core 2.0开发web api时遇到了同样的错误,并在重新启动计算机后得到解决。
答案 8 :(得分:0)
有时,Temp文件可能被工作站中的其他进程锁定。首先,请重新启动工作站并检查应用程序。
答案 9 :(得分:0)
在Windows 8上,对我来说绝对没有用。有一天,应用程序池突然决定他们不再希望在NetworkService帐户下工作。
我通过将应用池更改为在我自己的用户帐户下工作来解决问题。我知道这不是一个很好的解决方案,但它确实有效。
答案 10 :(得分:0)
当我使用bat文件删除临时文件时会发生此错误。它可能删除了目录本身,并且给定的权限已经消失。所以你必须以某种方式恢复它们。
最简单的方法是为Everyone授予对以下目录的完全控制权:
C:\的Windows \温度
C:\ Windows \ Microsoft.NET \ Framework [相关框架] \ Temporary ASP.NET Files \
答案 11 :(得分:0)
我有权限,但我开始收到错误。 "重启机器"适合我
答案 12 :(得分:0)
在公司实施了各种安全措施,剥夺了用户的管理员权限后,我又在公司环境中开始出现此错误。
对于开发人员,该公司授权创建可以使用的帐户,我们必须将这些帐户添加到PC的管理员组中,然后更改应用程序池的标识以使用该帐户。
示例(Windows 10)
为开发人员创建的帐户:domain \ developer
具有PC管理员权限的人必须执行以下操作:
现在配置应用程序池:
这时,我能够关闭所有内容,重新启动IIS,然后运行我的应用程序。然后,它可以访问以前无法访问的临时文件夹。
答案 13 :(得分:0)
就我而言,当我将加载用户配置文件更改为 True(应用程序池 -> 高级设置 -> 加载用户配置文件 -> 设置为 true)时,它可以工作。