2010-02-18 108 views
4

我們的一位合作伙伴向我們提供了一個需要從我們的應用程序訪問的程序集。不幸的是,這不是強名,所以我們無法將其安裝到GAC。我們不能將它放在與我們的可執行文件相同的地方。如何將非強名稱程序集註冊爲與GAC中一樣加載?

有沒有解決方案呢?

編輯:這將是一個只用於測試的臨時解決方案,當他們去RC時,我們將有一個強大的命名組件。

+0

出於好奇,爲什麼你不能把它放在與你的可執行文件相同的地方? – 2010-02-18 16:03:17

+0

無法訪問我假設的源代碼? – mxmissile 2010-02-18 16:04:50

+0

我很好奇,爲什麼它不能放在同一個目錄中。是否存在某種版本問題,它與您必須使用的另一個庫的名稱相同? – 2010-02-18 16:30:08

回答

5

您在這一點上有幾個選項。

首先是將程序集放置在具有name of the assembly (without the extension) which is a subdirectory of the application directory的目錄中。

第二個是指定您希望CLR使用probing element在app.config文件中探測引用的子目錄。

最後,您可以動態地使用各種Load methods on the Assembly class加載程序集,但我要說的是,在這種情況下,非常糟糕的主意,因爲你有裝配,你必須要在它使用的具體類型。像這樣的晚期裝配加載通常用於當你想取代某些抽象的實現時,這似乎並不是這種情況。

0

另一種解決方案是將以下內容添加到machine.config文件:

<runtime> 
    <developmentMode developerInstallation="true"/> 
</runtime> 

並添加DEVPATH =路徑系統環境變量。

3

使用反編譯&簽名(Visual Studio的開發者使用命令提示符)解決方法:

ildasm.exe /all /typelist /out=DataSystem.il DataSystem.dll 
ilasm.exe /dll /optimize /key=DataSystem.snk DataSystem.il 

DataSystem.snk可以作爲一個文件使用Visual Studio IDE http://www.bloggedbychris.com/2011/09/29/signing-a-net-assembly-in-visual-studio/

生成,那麼你應該能夠以運行

gacutil.exe -i DataSystem.dll 
相關問題