ASPX 编译器错误信息: CS0016: 未能写入输出文件 解决方法

一.错误信息提示如下:

编译器错误信息: CS0016:未能写入输出文件: '*:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\*\*.dll'--拒绝访问."

原因1:权限问题,访问权限问题。

解决方法1:为用户NETASP(NETWORK SERVICE [window 2003])设置windows下Temp文件夹的所有权限

解决方法2:

1、如果C:/Windows目录下没有Temp文件夹,则创建一个;

2、右键Temp文件夹--属性--安全,添加一个用户"NETWORK SERVICE ",(如果是.NET Framework 1.0 则添加用户"aspnet user"), "赋予权限--完全控制;

3、右击"我的电脑"-"属性"-"高级"-"环境变量",选择系统变量下的"TEMP",点编辑,设置变量值为 %SystemRoot%\TEMP,确定,再对"TMP"进行同样的操作,点击确定;

4、重启IIS服务,问题解决。

原因2:服务被某些优化软件禁止。

解决方案:

1、ASP.NET State Service被停止了,重新启动ASP.NET State Service服务,并设为自动。

2、开始-运行-iisreset;。

3、OK

参考

http://support.microsoft.com/default.aspx?scid=kb;en-us;329065

二、 另外还有一个 Access denied 的错误说是不能访问 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files 下的某个目录。产生这些错误的原因很多,主要的可能包括:Bin 目录或者 Web.config 被更改以及访问文件系统的权限不够。

如果 Bin 目录或者 Web.config 被更改,MSDN 网站上有文章说是因为 Microsoft Index Services(Indexing Service) 服务在运行。 详细内容可以访问: PRB: Access Denied Error When You Make Code Modifications with Index Services Running

但是另外还需要注意一些别的问题,

  • 检查 Bin 目录的文件系统访问权限。一般只要确保 Users 容器拥有“读取和运行”、“列出文件夹目录”和“读取”的权限就可以了。
  • 如果提示说不能访问 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\... ,可以将 Temporary ASP.NET Files 目录的访问权限列表中添加 Everyone,并设置为拥有所有的权限。然后在访问一次此 Web 应用程序后,将 Temporary ASP.NET Files 目录的访问权限列表中将 Everyone 删除就可以了。

综上所述的方法,主要包括:

  • 禁用或设置 Indexing Service 服务;
  • 检查 Bin 目录的访问权限;
  • 设置 Temporary ASP.NET Files 目录的访问权限。

三、在 Windows2003 下(IIS6),出现如下错误信息:

出现CS0016的原因一般是临时目录的权限不够,至于为什么中途出现这种问题,我尚不清楚,解决的办法是给Windows目录下的临时文件夹Temp的安全选项卡中加入NetWork Service用户并赋予全权。更详尽的解释参考MSDN。

MSDN给出的解释如下:

When you view a Microsoft ASP.NET Application in a Web browser, you may receive the following error messages:

For the Microsoft .NET Framework version 1.1, the error message is the following: CS0016: Could not write to output file 'c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\application1\c11b43f6\cf3ec03\rizcntet.dll' . The directory name is invalid. For the .NET Framework 1.0, the error message is the following: CS0013: Unexpected error writing metadata to file 'C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\Temporary ASP.NET Files\application2\3fc72f26\eb731247\ev2bslce.dll'. The directory name is invalid.

CAUSE The system TEMP and TMP variables point to a folder that does not exist. The compiler generates temporary files in the folder where the TEMP and the TMP variables point to before the files are copied to the Temporary ASP.NET Files folder. However, the folder where the system variables point to is deleted when you restart the computer. Therefore, the compiler cannot generate the temporary files.

RESOLUTION 1. Create a temporary folder under %Systemroot%, and then name it Temp.  2. Grant full permissions on the Temp folder to the aspnet user account in .NET Framework 1.0 or to the NETWORK SERVICE user account in .NET Framework 1.1. 3. Right-click My Computer, and then click Properties. 4. On the Advanced tab, click Environment Variables. 5. Select the TEMP variable under System variables, and then click Edit. 6. Type %SystemRoot%\TEMP in the Variable Value box, and then click OK. 7. Repeat steps 5 and 6 to edit the TMP variable. Click OK two times. 8. Click Start, and then click Run.  9. To reset Internet Information Services (IIS), type iisreset on the command prompt.

Note If the error message that is mentioned in the "Symptoms" section of this article persists, restart the computer.