如果我覆盖DLL,我的ASP.NET应用程序是否会停止执行?

Mos*_*osh 16 asp.net

假设我的ASP.NET应用程序正在进行4次单独的数据库调用.如果在第二次调用之后,我覆盖了BIN文件夹中的DLL,是否会阻止应用程序继续处理,从而导致第3次和第4次数据库调用失败?

莫什,非常感谢任何建议

Jim*_*ert 45

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

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

C:\ WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\demo1\9b9144a7\8665ac07

其中demo1是应用程序的名称,嵌套目录(我假设)是针对所包含资源的AppDomain的友好名称进行哈希处理的.

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

您可以在Application_Start中更改此目录,如下所述:在编译aspx页面的动态程序集期间,不会触发AssemblyResolve事件

您可以在web.config中关闭卷影复制:

<hostingEnvironment shadowCopyBinAssemblies="false" />

当在您的应用程序中更新其中一个影子复制文件时,会生成一个新的AppDomain,并允许当前AppDomain中的请求完成,而所有新请求都指向新的AppDomain.

有关Shadow Copying和AppDomains的更多信息,请查看MSDN的文章:http://msdn.microsoft.com/en-us/library/ms404279.aspx

Edit2:我刚刚了解到你可以修改文件复制操作之间所需的时间长度来生成AppDomain.

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

虽然在MSDN上没有这种行为的实例,但最好保留HttpRuntime可配置性的参考.