【问题标题】:Compilation error CS0016: Could not write to output file编译错误 CS0016:无法写入输出文件
【发布时间】:2013-02-13 17:16:36
【问题描述】:

简介

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

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 中编写的,并在应用程序池中运行,该应用程序池寻址 v2.0 .NET 框架并以集成模式运行。这是使用 Visual Studio 2010 开发的
  • Web4 - 这是使用 .NET 4.5 在 ASP.NET 中编写的,并在应用程序池中运行,该应用程序池寻址 v4.0 .NET 框架并以集成模式运行。这是使用 Visual Studio 2012 开发的。

最近,我几乎一直在 Web4 上的 VS2012 中工作,它工作正常,但是前几天我尝试运行 Web2 并得到了上面显示的异常。

奇怪的是,路径的一部分(我在上面用字母“zzz”替换)似乎指向德语路径,因为它是“\de-DE\” - 我不是用德语操作,所以我'不知道这个想法是从哪里来的。

几乎可以肯定不相关的一件事,但出于某种未知原因,我觉得值得一提:在此问题首次出现的前一天,我正在使用 Visual Studio 2012 中的性能分析工具,我不知道是否这可能对我的计算机进行了一些更改...??

尝试修复

网上有很多关于这个的话题;一些线程以成功结束,其中文件访问权限已被更改,而另一些线​​程则以有点绝望的声音结束......我已经完成了将我的 PC 上所有相关探测目录的 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。

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

谢谢大家

格里夫

【问题讨论】:

  • 所以您已确保 ASP.NET 临时文件和 C:\Windows\temp 文件夹具有具有完全控制权限的 IIS_IURS 和 NETWORK SERVICE 用户?
  • 他们和我的同事一样... 临时 ASP.NET 文件:IIS_IUSRS 具有修改 + 特殊权限;没有提到网络服务。 Windows Temp:IIS_IUSRS 具有特殊权限; NETWORK SERVICE 已修改。我更改了它们,使它们都具有完全控制权并进行了 IISRESET。完全相同的错误信息。
  • 有一点没有经过测试 - 我们有一个新的防病毒服务,我无法关闭(由于政策无法停止该服务)。这有什么责任吗?如前所述,它不会影响我在使用 .NET 4 的 AppPools 下运行的网站,只会影响使用 .NET 2 的网站。
  • 关掉杀毒软件还是不行,所以不是杀毒软件有问题。
  • 我现在能想到的唯一选择就是重新安装完整的框架(v2)

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


【解决方案1】:

在 IIS 管理器中,在应用程序池的高级设置中,确保“进程模型 > 加载用户配置文件”设置为“真”。

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

【讨论】:

  • 这救了我一个冠状动脉。
  • 我在谷歌上搜索这个问题已经好几个小时了。这解决了我的问题。谢谢
  • 在哪里可以找到设置,在 Visual Studio 中?
  • 嗨,史密斯,不,设置是 IIS(Internet 信息服务)。在 Windows 框中的 RUN 命令中键入“IIS”。
  • 这里描述了另一种方法(在 C:\Windows\Temp 中向 IIS_IUSRS 授予写入权限):stackoverflow.com/a/5390823/3606250
【解决方案2】:

使用 ProcMon 找到了答案:

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

临时 asp.net 文件首先在用户的 temp 文件夹中创建,然后移动到此文件夹中。由于一些未知的原因,我的 Web2 站点 (.NET 2 AppPool) 的编译现在使用与我的 Web4 (.NET 4 AppPool) 站点相同的文件夹。

我使用 ProcMon 来识别“拒绝访问”的所有结果,并授予 IIS_IUSRS 组写入权限(在一种情况下 - C:\Users\ASP.NET V4.0 Integrated - 修改权限)。

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

【讨论】:

  • 这让我头晕目眩。我已经尝试了几乎所有我发现的关于这个问题的方法。我发现我的临时变量(temp / tmp 环境变量)指向一个用户文件夹,所以将它们重新映射到一个全局文件夹,我将权限添加到该文件夹​​。没有运气。浪费了半天之后,我才找到了这个并给了它最后一枪。谢谢!
  • 非常感谢,ProcMon 是救生员
  • ProcMon 让我理顺了。我已经删除并重新创建了“C:\Windows\Temp”以释放一些空间,这破坏了文件夹的安全性。尽管该应用程序抱怨“c:\Windows\..\Temporary ASP.NET Files”,但这实际上并不是问题。
  • 使用 procmon 确定的另一个潜在原因 - Resharper DotPeek 和 Visual Studio 锁定临时文件夹中的 dll。
【解决方案3】:

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

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

注意:不要只检查顶部的两个变量,查看系统变量下的滚动菜单。您可能会发现那里也配置了变量。

【讨论】:

  • 谢谢@JohnSmith,这对我来说是个问题。此路径指向的驱动器在重新启动时不再存在。
【解决方案4】:

这可能不是原因,但是在尝试使用 Instrumentation 方法运行 VS 2010 性能向导后,我开始出现此错误。

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

【讨论】:

  • 谢谢,我的应用程序池用户的身份有问题。
猜你喜欢
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2014-09-17
  • 1970-01-01
  • 2017-11-10
相关资源
最近更新 更多