2013-02-13 18 views
2

我的C#.net可執行文件需要進行簽名才能使用另一個提供密碼訪問的程序集中的某個方法。簽名的應用程序如何使用未簽名的程序集(可以在客戶站點重新生成)

相同的可執行文件需要引用和使用未簽名的程序集。它未簽名的原因是我們爲客戶提供了一種在網站上重新生成它的方式(它在應用程序中封裝對建模自定義的訪問)。

單程序可以使用簽名和未簽名的程序集嗎?

回答

8

您不能從已簽名的程序集中引用未簽名的程序集,但可以使用Assembly.Load方法之一輕鬆加載一個程序。

通常您在簽名程序集中提供接口(或基類,如果您喜歡),並在整個代碼中使用該接口在編譯時獲取信息。客戶的未簽名程序集(插件)在特定標記的類上實現了該接口。比你的應用程序加載程序集(從默認位置通過Load,或從指定文件通過LoadFile),找到並構造類,而不是使用它來獲取信息在運行時。

注意:您也可以查看「如何在C#/ .Net中實現插件」方法的問題。

+0

謝謝,我不知道Load或LoadFile繞過了簽名限制!我會嘗試採取這種方法,但只是想知道,難道這不就是一個安全缺陷? – 2013-02-13 17:48:54

+0

@DarrinDoherty,「繞過」可能是錯誤的單詞......它被設計用來加載你想要/需要的任何程序集 - 假設你的完全信任代碼理解安全含義並且正確加載。 – 2013-02-13 17:54:02

+0

明白了,謝謝! – 2013-02-13 18:00:12

1

我相信你使用無符號的程序集的唯一方法是在運行時使用反射來加載它。

如果您的可執行文件引用了未命名的強名稱,則無法爲其添加強名稱。

相關問題