IIS 6+ASP.NET-生成许多临时文件

vcudknz3  于 2023-04-21  发布在  .NET
关注(0)|答案(3)|浏览(151)

我有一个ASP.NET+一些. NET Web服务运行在IIS 6(win 2003服务器).问题是IIS正在生成大量(!)的文件在"c:\WINDOWS\Temp"目录.大量的文件意味着成千上万的文件,其中得到超过3G的大小到目前为止.
这些文件由以下命令生成:C:\WINDOWS\SysWOW64\inetsrv〉"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe "/t:library/utf8output/R:“丙:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\vfagt\113819dd\db0d5802\assembly y\dl3\fedc6ef1\006e24d8_3bc9ca01\VfAgentWService.DLL "/R:" C:\WINDOWS\assembly\GAC_MSIL\System. Web. Services\www.example.com __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"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文件在我的web应用程序).
谢谢,莫伊

tjvv9vkg

tjvv9vkg1#

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)。
相关:

bkhjykvo

bkhjykvo2#

在你的web.config中寻找这个:

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

值= 1意味着保存临时文件。2你可以预编译序列化文件以防止编译的发生。

czfnxgou

czfnxgou3#

不知道这是否有帮助,但在这里你有一对夫妇的链接,描述了类似的情况
Link
http://social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/fddb5072-f84b-432a-945a-607e183e1da3

相关问题