IIS 6和x2B;ASP.NET-生成了许多临时文件

IIS 6和x2B;ASP.NET-生成了许多临时文件,asp.net,iis,compilation,tempdir,Asp.net,Iis,Compilation,Tempdir,我有一个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\

我有一个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\ASP.NET临时文件\vfagt\113819dd\db0d5802\assembly\dl3\fedc6ef1\006e24d8\u 3bc9ca01\VfAgentWService.DLL”/R:“C:\WINDOWS\assembly\GAC\MSIL\System.Web.Services\2.0.0\uUuU b03f5f7f11d50a3a\System.Web.Services.dll”/R:“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll”/R:“C:\WINDOWS\assembly\GAC\uMSIL\System.Xml\2.0.0.0\uUuU B77A561934E089\System.Xml.dll”/R:“C:\WINDOWS\assembly\GAC\MSIL\System\2.0.0.0\u934E089\u934E089系统”/C:\WINDOWS\TEMP\9i_i2bmg.dll”/debug-/optimize+/nostdlib/D:_动态XMLSERIALIZER_编译“C:\WINDOWS\TEMP\9i_i2bmg.0.cs”

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

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

我怎样才能预防它

更新:

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

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

谢谢,
Moe

您无法阻止它。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,则在ASPNET临时文件目录树中有一个System.Xml.dll副本放在三个不同的临时目录中。这些副本可能会累积,如果听说您的3gb大部分都是dll副本,我不会感到惊讶

阅读更多关于此的信息,请访问

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


相关:
-

-

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


在web.config中查找:

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


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

老实说,这似乎与iis无关,但与csc(编译器)有关,感谢您的详细解释。但是,问题在于我上面描述的命令(csc.exe)正在执行多次,导致.out&.err生成多次,直到占用磁盘空间。所以-我的问题是:是什么导致此命令运行如此多次?(我的web应用中没有那么多.aspx&.asmx文件)。时间戳可能有问题。如果编译输出的时间戳晚于.aspx文件,则ASPNET决定运行编译器。例如,如果您将aspx文件的时间戳设置为将来某个时间(可能,但不合理)我的建议是停止IIS,删除临时文件文件夹,然后检查并更正所有ASPX文件上的时间戳,等等。