2010-12-09 26 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

相關問題