如何讓程式識別不同目錄下的dll

2021-08-19 09:11:07 字數 1592 閱讀 8240

我們看到,上面的順序無論是否有強名稱簽名看,都提到了乙個名詞「私有目錄」

——【推薦】

這是最簡單的方法,當然也有一定的侷限性,就是沒法對dll做控制,另外,無法解決第三方dllimprt中引入的程式集不在根目錄下的問題,不過無論怎麼說,這個都基本解決了問題。

配置如下,多個目錄用;分隔

xmlns="urn:schemas-microsoft-com:asm.v1">

privatepath="3rdlib;mylibs;subfolder\sub.dll"/>

assemblybinding>

runtime>

方法二:訂閱程式集解析事件assemblyresolve在**中解析

這也正是assembly.loadassembly.loadfrom等方法的用武之地。

assembly currentdomain_assemblyresolve(object sender, resolveeventargs args)

方法三:在載入使用到dll的**之前設定重置當前環境的目錄

這個方法就是通過environment.currentdirectory=custompath,這樣,在呼叫dll方法時,因為目錄已經切換到了

這是乙個取巧的方法,不是很實用,要來回切換程式集目錄,但是在某些情況下非常好用

自己寫dllimport

如果是自己寫,那麼久好控制了,可以直接指定相對的目錄dllimport(3rdlibs\nlog.dll)。不過這種方法不一定可靠,在某些系統硬是載入不了,如果使用了dllimport還是,推薦下面的另外一種方法。

引用的c#的外掛程式又使用了dllimport

這是很多文章都沒有提及的:

因為無法更改路徑,那麼只能夠使用上述特殊的方法,更改當前程式的路徑

當然,還有更省事一點的做法,就是在系統環境中,增加一條記錄,指向要載入的dll的所在目錄。因為c++的**中,windows目錄和windows\system32目錄以及環境變數設定的目錄都是搜尋路徑之一。

這裡提供怎麼從c#中修改系統環境變數的**:

static

void

addenvironmentpaths(ienumerable paths)

; string newpath = string.join(path.pathseparator.tostring(), path.concat(paths));

environment.setenvironmentvariable("path", newpath);

}

如何讓不同的二級網域名稱訪問不同的目錄

當您在開發乙個系統,需要為每個使用者分配乙個二級網域名稱並讓他訪問各自的內容時,比如 abc使用者註冊後為其分配乙個abc.web9898.cn的網域名稱,當使用者輸入abc.web9898.cn的時候自動訪問www.web9898.cn abc的內容 因為要讓無限制的網域名稱訪問某乙個 所以在虛擬...

Android中獲取不同語言目錄下的字串

首先建立兩個api private final static string lan fr fr private final static string lan es es resources getresourcesbylocale resources res,string localename p...

Python在不同目錄下匯入模組的方法

python在不同層級目錄import模組的方法 使用python進行程式編寫時,經常會呼叫不同目錄下的模組及函式。本篇部落格針對常見的模組呼叫講解匯入模組的方法。1.同級目錄下的呼叫 目錄結構如下 src mod1.py test1.py 若在程式test1.py中匯入模組mod1,則直接使用 i...