假设我的ASP.NET应用程序正在进行4个独立的数据库调用。如果在第二次调用之后,我覆盖BIN文件夹中的DLL,它是否会阻止应用程序继续进行处理,从而导致第三次和第四次数据库调用失败?如果覆盖DLL,我的ASP.NET应用程序是否会停止执行?
任何意见,将不胜感激, MOSH
假设我的ASP.NET应用程序正在进行4个独立的数据库调用。如果在第二次调用之后,我覆盖BIN文件夹中的DLL,它是否会阻止应用程序继续进行处理,从而导致第三次和第四次数据库调用失败?如果覆盖DLL,我的ASP.NET应用程序是否会停止执行?
任何意见,将不胜感激, MOSH
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元素,您可以指定waitChangeNotification和maxWaitChangeNotification以便不会为每个复制的文件生成新的AppDomain。 请参阅MSDN。
虽然在MSDN上没有这种行为的实例,但最好将其作为HttpRuntime可配置性的参考。
的组件加载到应用程序域,和应用程序域手表的目录,如果更换组件,将回收的应用程序,并重新加载组件。所以,你的第三/第四个电话会失败。
我以为目录是由asp.net的ISAPI DLL(AppDomain)监听的,而不是IIS本身。你有关于IIS看这个目录的一些资源吗? – 2010-12-09 03:12:19
我没有咖啡,你是对的。它由AppDomain观看。 – Phill 2010-12-09 03:14:18