2013-02-27 282 views
15

简讯编译错误CS0016:无法写入到输出文件

当我尝试浏览我的网站,我收到以下错误信息:

CS0016:无法写入到输出文件'C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 \临时ASP.NET文件\ WWW \ XXX \ YYY \ ZZZ \ abdll' - '目录名称是无效的'

详细

我有我的开发PC上的两个web站点(假名):

  • WEB2 - 这是在解决了V2的应用程序池使用.net 3.5和运行用ASP.NET。 0 .NET框架,并以集成模式运行。这是使用Visual Studio 2010开发的
  • Web4 - 这是使用.NET 4.5编写的ASP.NET,并运行在可解决v4.0 .NET框架的AppPool中,并以集成模式运行。这是使用Visual Studio 2012

最近开发的,我在VS2012一直致力于WEB4几乎一直工作得很好,但是有一天,我试图运行的WEB2.0,得到了上面显示的异常。

奇怪的是,我上面用字母“zzz”代替的部分路径似乎指向德语语言路径,因为它是“\ de-DE \” - 我没有用德语操作,所以我我不知道它从哪里得到这个想法。

有一件事几乎可以肯定是不相关的,但是由于某种未知的原因,我觉得有必要提一下:我在Visual Studio 2012中使用性能分析工具的时候,这个问题首次出现,我不知道如果这可能对我的电脑做了一些改变......?

尝试的修复

有这方面在互联网上相当多的线程;一些线程成功地在文件访问权限被修改的时候终止,而另一些线​​程在一个有点绝望的声音笔记上完成了......我已经完成了将PC上的所有相关探测目录上的NTFS权限与其同事的NTFS权限进行比较的过程这台机器还在工作。不幸的是,那里没有任何喜悦。

我也有未安装asp.net 2.0和重新使用安装了它:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -u 
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -ir 

,并再次,没有喜悦,在那里无论是了。

我的Web4继续运行不受影响。

另外FYI:在Win7 x64上使用IIS 7.5。

我现在正转向更广泛的观众,希望将我目前的绝望状态变为成功之一。

谢谢大家

格里夫

+0

因此您确定临时ASP.NET文件和C:\ Windows \ temp文件夹具有完全控制权限的IIS_IURS和NETWORK SERVICE用户? – 2013-02-27 19:51:25

+1

他们和我的同事一样...... **临时ASP.NET文件**:IIS_IUSRS具有修改+特殊权限;网络服务没有被提及。 ** Windows Temp **:IIS_IUSRS具有特殊权限;网络服务已修改。 我改变了他们,让他们都有完全控制并做了IISRESET。 完全相同的错误消息。 – DrGriff 2013-02-28 07:02:25

+0

有一件事没有经过测试 - 我们有一个新的防病毒服务,我无法关闭(由于策略无法停止服务)。这可以以任何方式负责?如前所述,它不会影响我在使用.NET 4的AppPools下运行的网站,只是那些使用.NET 2的网站。 – DrGriff 2013-02-28 07:13:49

回答

9

答案是使用procmon中发现:

http://technet.microsoft.com/en-us/sysinternals/bb896645

临时asp.net文件在用户的临时文件夹首次创建和然后移到这个文件夹中。对于某些尚未知道的原因,我的Web2站点(.NET 2 AppPool)的编译现在使用与我的Web4(.NET 4 AppPool)站点相同的文件夹。

我使用ProcMon识别“访问被拒绝”的所有结果并给出了IIS_IUSRS组写入权限(并且在一种情况下 - C:\ Users \ ASP.NET V4.0集成 - 修改权限)。

我不知道为什么编译使用“错误”的文件夹,我怀疑我可能在某些情况下过度提高了权限,但现在它正在工作。

+0

这让我头晕目眩。我已经尝试了几乎所有关于这个问题的发现。我发现我的临时变量(temp/tmp环境变量)指向一个用户文件夹,因此将它们重新映射到一个全局文件夹,我添加了权限。没有运气。只有在浪费了半天的时间之后,我发现了这一点,并且给了它最后一枪。谢谢! – Ben 2014-07-24 05:11:53

+0

非常感谢,ProcMon是一个救生员 – mimo 2014-11-18 12:09:16

+0

ProcMon让我理顺了。我已经删除并重新创建“C:\ Windows \ Temp”来释放一些空间,这会消除文件夹上的安全性。即使应用程序在抱怨“c:\ Windows \ .. \ Temporary ASP.NET Files”,但实际上并不是问题所在。 – NTDLS 2015-03-05 16:23:26

39

在IIS管理器中,在应用程序池的高级设置中,确保“Process Model> Load User Profile”设置为“True”。

我有这个完全相同的问题。我尝试更改权限,禁用防病毒,创建新的应用程序池,并重新安装.NET。我甚至创建了一个只有“Default.aspx”页面的新网站,并试图查看该网站。即使该网站有编译错误。最后,我注意到我的应用程序池(干净的测试站点和主站点)对于加载用户配置文件设置具有非默认值“False”。我将其设定为真,问题就消失了。

+6

宾果!!!!!!!!!! – 2013-09-23 16:01:19

+2

这为我节省了冠状动脉。 – 2014-05-11 02:02:04

+0

浏览谷歌数小时后,答案!谢谢! – RASG 2014-06-02 14:52:08

4

如果以上的答案没有解决它适合你,检查你的环境变量(计算机右键 - >属性 - >高级系统设置 - >高级选项卡 - >环境变量

确保(完全访问网络服务,IIS_IUSRS)

注意:不要只检查顶部的两个变量,查看系统变量下的滚动菜单。可能会找到配置的变量。

+0

谢谢@JohnSmith这是我的问题。该路径指向的驱动器在重新启动时不再存在。 – 2015-11-20 09:04:44

3

它可能不是原因,但是这个错误st在尝试使用Instrumentation方法运行VS 2010性能向导后出现的问题。

快速修复我的DEV环境:将应用程序的应用程序池的标识更改为LocalSystem。

+0

谢谢,这是我的App Pool用户身份的问题。 – Gilles 2016-08-01 13:11:43

相关问题