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

时间:2013-02-27 18:48:10

标签: asp.net asp.net-mvc visual-studio iis asp.net-mvc-4

简介

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

  

CS0016:无法写入输出文件'c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files \ www \ xxx \ yyy \ zzz \ abdll' - '目录名是无效'

详情

我的开发PC上有两个网站(虚构名称):

  • Web2 - 这是使用.NET 3.5在ASP.NET中编写的,并在AppPool中运行,该AppPool用于解决v2.0 .NET框架并以集成模式运行。这是使用Visual Studio 2010
  • 开发的
  • Web4 - 这是使用.NET 4.5在ASP.NET中编写的,并在AppPool中运行,该AppPool用于解决v4.0 .NET框架并以集成模式运行。这是使用Visual Studio 2012开发的。

最近,我几乎经常在Web4上使用VS2012工作并且工作正常,但是前几天我尝试运行Web2并且上面显示了异常。

奇怪的是,路径的一部分(我上面用字母“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继续不受影响。

另外,仅供参考:在Win7 x64上使用IIS 7.5。

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

谢谢大家

格里夫

4 个答案:

答案 0 :(得分:42)

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

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

答案 1 :(得分: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集成 - 修改权限)。

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

答案 2 :(得分:4)

如果上述答案没有为您解决,请检查您的环境变量(右键单击计算机 - >属性 - >高级系统设置 - >高级标签 - >环境变量

确保临时变量指向具有所有必要权限的文件夹。 (网络服务的完全访问权限,IIS_IUSRS)

注意:不要只检查顶部的两个变量,查看系统变量下的滚动菜单。您也可以在那里找到配置的变量。

答案 3 :(得分:4)

可能不是原因,但是在尝试使用Instrumentation方法运行VS 2010 Performance Wizard之后,我发生了这个错误。

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