2

我有一个 ASP.NET + 一些在 IIS 6(win 2003 服务器)上运行的 .NET Web 服务。问题是 IIS 在“c:\WINDOWS\Temp”目录中生成了很多(!)文件。许多文件意味着数千个文件,到目前为止,它们的大小已超过 3G。

文件由以下命令生成:C:\WINDOWS\SysWOW64\inetsrv> "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe" /t:library /utf8output /R:"C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\vfagt\113819dd\db0d5802\assembly\dl3\fedc6ef1\006e24d8_3bc9ca01\VfAgentWService.DLL" /R:"C:\WINDOWS\assembly\GAC_MSIL\System .Web.Services\2.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll" /R:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /R:"C:\WINDOWS\ assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll" /out:"C:\ WINDOWS\TEMP\9i_i2bmg.dll" /debug- /optimize+ /nostdlib /D:_DYNAMIC_XMLSERIALIZER_COMPILATION "C:\WINDOWS\TEMP\9i_i2bmg.0.cs"

temp 目录中的文件是成对的 *.out 和 *.err,其中 *.err 文件大小为零,*.out 文件包含编译输出消息。

是什么导致 IIS 生成这么多文件?

我该如何预防?

更新:

问题是我上面描述的命令(csc.exe)被执行了很多(很多)次,导致.out和.err被生成了很多次,直到它消耗了磁盘空间。

所以 - 我的问题是:是什么导致这个命令运行这么多次?(我的网络应用程序中没有那么多 .aspx 和 .asmx 文件)。

谢谢,萌

4

3 回答 3

2

你无法阻止它。IIS + ASP.NET 动态编译 .aspx、.asmx、.ascx、.ashx、.asax 等文件。这些都是模板文件,最终会转换为所选语言的源代码 - C#、VB.NET 或任何您选择用于编写 ASPX 页面的语言。

接收到页面请求时,ASP.NET 的模型是这样的:

  • 检查所请求页面的程序集是否可用并且是最新的。如果是,则将请求传递给页面。
  • 如果没有,则从所涉及的模板(aspx、ascx 等)生成源代码。将生成的源代码放入 ASP.NET Temp 目录。
  • 将源文件编译为动态命名的程序集,并放置在临时目录中。如您所见,如果您使用 C#,这意味着它运行 csc.exe。
  • 加载新编译的程序集。
  • 将请求传递给该程序集(例如,步骤 1)

.out 和 .err 文件只是调用 csc.exe 的 stdout 和 stderr。这些不太可能消耗 3gb 的文件系统空间。

但是,ASPNET 还会在该目录树中保留任何页面或控件(等)引用的所有程序集的临时副本。如果您在三个不同的 ASPX 页面中引用 System.Xml.dll,则 System.Xml.dll 的副本会放置到 ASPNET 临时文件目录树中的三个不同的临时目录中。这些副本可以累积,听到您的大部分 3gb 都在 DLL 副本中,我不会感到惊讶。

在http://www.codeproject.com/KB/aspnet/ASPXFILES.aspx了解更多信息

您可以删除目录中的任何文件C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files。这在 IIS 和 ASP.NET 处于活动状态时是不可能的。如果您有维护期,则可以在站点关闭时将其删除。如果是开发机器,只需停止 IIS ( net stop w3svc) 删除该文件夹中的所有子目录,然后重新启动 IIS ( net start w3svc)。


相关:
-消除临时 ASP.Net 文件
- “临时 ASP.NET 文件”文件夹是做什么用的?

于 2010-03-25T15:52:50.517 回答
1

在您的 web.config 中查找此内容:

  </system.diagnostics>
    <switches>
      <add name="XmlSerialization.Compilation" value="1" />
    </switches>
  </system.diagnostics>

value = 1 表示保存临时文件。您可以预编译序列化文件以防止编译发生。

于 2014-01-30T21:23:45.207 回答
0

不确定这是否有帮助,但在这里你有几个描述类似情况的链接

http://geekswithblogs.net/akraus1/archive/2009/09/14/134820.aspx

http://social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/fddb5072-f84b-432a-945a-607e183e1da3

于 2010-03-25T18:21:31.657 回答