我有一個服務器可執行文件,與Active Directory進行通信以檢索用戶信息。除了AD之外,這個exe允許客戶編寫他們自己的插件來與自定義用戶目錄交談。具有強名稱的C#插件架構:誤解
此可執行文件是強命名的。
是以下一個真實的陳述:
爲了強命名 組件加載另一個裝配, 加載的程序集還必須使用相同的密鑰簽名 。
如果程序集沒有強有力的簽名,並且沒有錯誤指示程序集沒有正確簽名,那麼下面的代碼返回null。請注意,如果我簽署了程序集,我會得到一個IService的實例。這導致我相信加載的程序集必須進行強有力的簽名。
Assembly assembly = Assembly.LoadFrom(path);
foreach (Type t in assembly.GetTypes())
{
if (t.GetInterface(typeof(IService).FullName) != null)
{
return (Activator.CreateInstance(t) as IService);
}
}
那麼,這是否意味着,如果你有一個強簽名的程序集,並支持組裝的插件,他們也必須進行簽名 - 插件作者必須使用相同的密鑰簽名呢?這聽起來不對。假設我有一個實現了IService接口的程序集,但也引用了一個程序集,它引用了另一個程序集,每個程序集都用不同的鍵簽名。當我嘗試加載時會發生什麼?他們是否應該用同一把鑰匙簽名?
但這是否意味着在運行時用'Assembly.LoadFrom()'加載的程序集也需要簽名?我不這麼認爲。 – 2009-09-02 18:03:52
@P爸爸:嗨,說說錯過了樹林。這是一個很好的問題 - 我也不這麼認爲。事實上,如果你在「Assembly.Load Strong Name」上搜索,你會發現一羣人在詢問如何執行強名稱要求。現在我對上面發佈的代碼的行爲感到困惑。 – 2009-09-02 19:10:16