ASP.NET使用临时文件目录来存储卷影复制和动态编译的文件。典型的路径将如下所示。注意路径末尾的哈希值。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\{hash}
我正在使用自动部署,并注意到这些文件夹及其内容不会自动删除。作为部署过程的一部分,我想自动删除未使用的临时文件的过程。这样,只要部署了我的站点的新版本,就会删除旧的临时文件。
哈希似乎是以确定的方式生成的,所以我希望我能够将哈希确定为部署前脚本的一部分,并在部署后删除它。
如何为ASP.NET网站计算哈希值?
参考文献:
答案 0 :(得分:3)
好吧,有一点时间使用Reflector,在System.Web中搜索“Temporary”这个词的所有成员显示这个调用让我来到这里:
string str2 = AppManagerAppDomainFactory.ConstructSimpleAppName(AppDomainAppVirtualPath);
但后来我记得源代码可用于所有.NET,因此我转向实际代码,而不是反射代码:https://referencesource.microsoft.com/#System.Web/HttpRuntime.cs,870
稍后在该方法“SetupCodeGenDirectory”中,路径似乎构建在
之上 this._codegenDir = Thread.GetDomain().DynamicDirectory;
因此,看起来哈希来自DynamicDirectory。那就在http://referencesource.microsoft.com/#mscorlib/system/appdomain.cs#2792,这看起来像是一个COM融合加载器内部的外部东西:
[ComImport,InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("7c23ff90-33af-11d3-95da-00a024a85b51")]
但GUID引导我到这里http://referencesource.microsoft.com/#mscorlib/microsoft/win32/fusionwrap.cs#94
这意味着它是一个公钥令牌部分:
public const uint HASH_VALUE = PUBLIC_KEY_TOKEN + 1;
public const uint NAME = HASH_VALUE + 1;
那也许是NAME?我猜它是yourAssembly.GetPublicKeyToken();
或者,只需在web.config中的system.web中的配置部分http://msdn.microsoft.com/en-us/library/system.web.configuration.compilationsection.tempdirectory%28VS.80%29.aspx中更改临时ASP.NET文件所在的文件夹
<compilation tempDirectory="D:\MoveThemHere">
答案 1 :(得分:1)
我知道这是一个老问题,但是如果有人仍然需要它,那么这就是C#代码。我想移植到PowerShell并不难。
datetimefield
HashCode类:
string siteId = "/LM/W3SVC/3/ROOT"; // This can be composed by getting the site ID using the ServerManager (Microsoft.Web.Administration)
string physicalPath = "E:\\home\\mysite\\web\\";
string v_app_name = HashCode.GetString32((siteId + physicalPath).ToLower(CultureInfo.InvariantCulture)).ToString("x", CultureInfo.InvariantCulture);
string dir_name_32_bits_app = HashCode.GetString32(v_app_name).ToString("x8");
string dir_name_64_bits_app = HashCode.GetString64(v_app_name).ToString("x8");
Console.WriteLine("32 bits: " + dir_name_32_bits_app);
Console.WriteLine("64 bits: " + dir_name_64_bits_app);