2010-12-09 29 views

回答

45

ASP.NET在各种资源(包括DLL和ResX文件)上执行一项名为的影子复制。当框架访问文件时,它被锁定,阻止直接访问。为防止锁定root/bin或root/App * _Resources(例如)中的文件,它会将这些资源复制到预定的目录。

[编辑]
预定目录默认为类似

C:\ Windows \ Microsoft.NET \框架\ v4.0.30319 \临时ASP.NET文件\ demo1的\ 9b9144a7 \ 8665ac07

其中demo1的是(我认为)被散列对友好名称的应用程序的名称和嵌套目录包含资源的AppDomain。

例如,我有一个目录,名为dbresourceproviderweb来自MSDN上由Michelle Bustamante编写的资源提供者示例。在该目录中,有两个文件夹:c8b872e2和7fc33f08。百尺竿头更进一步,为厄瓜多尔西班牙编译资源下... \ dbresourceproviderweb \ c8b872e2 \ 97074f76 \ ES-EC... \ dbresourceproviderweb \ 7fc33f08 \ ac65ebd3 \ ES-EC
[/编辑]

你可以作为的Application_Start这里说明更改该目录:AssemblyResolve event is not firing during compilation of a dynamic assembly for an aspx page

您可以在web.config中关闭的卷影拷贝:

<hostingEnvironment shadowCopyBinAssemblies="false" />

当您的应用程序更新这些影子复制文件之一时,将产生一个新的AppDomain,并允许当前AppDomain中的请求完成,同时将所有新请求指向新的AppDomain。

有关阴影复制和应用程序域的更多信息,请查看MSDN的文章:http://msdn.microsoft.com/en-us/library/ms404279.aspx

EDIT2: 我刚刚得知,您可以修改文件复制操作之间的时间长度要求产卵一个AppDomain。

在系统中。web/httpRuntime元素,您可以指定waitChangeNotificationmaxWaitChangeNotification以便不会为每个复制的文件生成新的AppDomain。 请参阅MSDN

虽然在MSDN上没有这种行为的实例,但最好将其作为HttpRuntime可配置性的参考。

2

的组件加载到应用程序域,和应用程序域手表的目录,如果更换组件,将回收的应用程序,并重新加载组件。所以,你的第三/第四个电话会失败。

+1

我以为目录是由asp.net的ISAPI DLL(AppDomain)监听的,而不是IIS本身。你有关于IIS看这个目录的一些资源吗? – 2010-12-09 03:12:19

+1

我没有咖啡,你是对的。它由AppDomain观看。 – Phill 2010-12-09 03:14:18

相关问题