<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
不許重新編譯整個系統就可以更新某個模組的方法我們都知道,那就是用反射功能,比如
assembly.load,可以在**層動態載入某個模組。但要實現真正的執行過程中動態更換,我們必須有乙個機制,首先把舊的版本從程序中解除安裝,然後載入新的版本,不幸的是,我們沒有乙個assembly.unload方法,我們必須尋找其他途徑。
首先看主程式:
static
void
main() }
這裡是介面類remotehelper:
public
class
remotehelper:marshalbyrefobject
public
void
ziplogfile(
intfilenumber)
;methodinfo ziplogmethodinfo =
ziplogtype.getmethod("zipfiles");
ziplogmethodinfo.invoke(activator.createinstance(ziplogtype),
ziplogarguments);}}
壓縮模組的assemblyname配置在config檔案中
當需要更新模組時,我們做兩件事情:
1.用新的
assembly替換掉舊的,直接覆蓋,(當正在壓縮檔案時不可以,避開這個時間段);
2.更改配置檔案中的
newdomainfunction名字。
下面是壓縮模組的**:
public
class
ziplog
public
void
zipfiles(
intfilenumber)
",datetime.now.tostring("yyyy.mm.dd hh:mm:ss"));
tw.close();
//zip function...}}
} 啟動主程式執行,然後把壓縮模組的版本更新,替換舊的版本。下面是測試結果:
dll fullname:newdomainfunction, version=1.0.3273.17760, culture=neutral, publickeytoken=cc277552af2314ec
zip time:2008.12.17 10:04:16
dll fullname:newdomainfunction, version=1.1.3273.18113, culture=neutral, publickeytoken=cc277552af2314ec
zip time:2008.12.17 10:05:07
到此一切順利,不過有個小地方我們感到不方便,那就是我們必須避開壓縮檔案的時候,如果正在壓縮檔案你去公升級,比如我們在
zipfiles
system.threading.thread.sleep(60000);
再執行,並且當你確定正在執行
zipfiles
時刪掉newdomainfunction.dll
檔案,將出現下面的錯誤:
這個錯誤的原因是系統會對程序裡用到的原**檔案進行鎖定。雖然在我們的例子中遇到這個時候的機率並不高,我們還是需要解決這個問題。解決方案是
」shadow copy」
。在主程式
createdomain
newdomaininfo.shadowcopyfiles="true";
domaininfo.shadowcopydirectories="file:///" + system.environment.currentdirectory;
這樣的話,系統將把**檔案複製乙份拷貝到其他目錄(
)。系統執行的任何時候你將可以更新模組檔案。
翻譯 應用程式池和應用程式域的區別
應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...
翻譯 應用程式池和應用程式域的區別
應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...
關於跨應用程式域邊界的物件訪問
乙個應用程式域可以通過兩種方式和另乙個應用程式域進行通訊。一種是傳值 by value 另一種是傳引用 by reference 傳值是通過物件的序列和反序列實現的,因此要傳遞的物件必須有system.serializable屬性.它的實現原理 我們在應用程式域a中構造了乙個物件a1,現在要將物件a...