簡體   English   中英

程序集以及何時不能選擇強命名?

[英]Assemblies and when strong naming is not an option?

不久前,我在Stack Overflow, 程序集名稱和版本上詢問了以下問題。

現在我已經意識到我無法使用強名稱簽署我的程序集,因為第三方依賴項之一不是強名稱程序集,因此我的簽名不可信。

我試圖簡單地將程序集文件名MyAssembly.dll更改為MyAssembly.v.1.1.dll,但是當我這樣做並引用重命名的程序集時 - 它不會像其他引用一樣被復制。 似乎是因為文件名和程序集的Identity屬性之間存在不匹配。

我有項目A和B,它們是項目C的依賴項。項目A需要引用MyAssembly.dll v.1.0,項目B需要引用MyAssembly.dll v.2.0,因此兩者都需要能夠位於Project C的bin /中發布文件夾。

怎么辦? 我怎樣才能解決這個問題?

理想情況下,任何自尊的第三方組裝開發人員都會簽署他們的程序集。 我會嘗試以下方法:

  1. 看看您是否可以聯系第三方程序集提供商並請求他們為您簽名。
  2. 如果第三方程序集提供程序是開源的,請使用強名稱密鑰自行下載並編譯源代碼。 (考慮將此貢獻回項目)。

否則,(只要許可證允許):

  1. 嘗試ildasm.exeilasm.exe,如下所示:

    ildasm.exe /out:TheAssembly.il TheAssembly.dll

    ilasm.exe TheAssembly.il /key=MyKey.snk / dll /output=TheAssembly.dll

  2. 嘗試其他人提到的ILMerge

否則,您可能需要為第三方程序集中當前的功能尋找其他選項。

祝你好運!

一種選擇可能是使用ILMerge對第三方程序集進行簽名,但如果第三方非常定期地對其程序集部署更新,則更新會有點麻煩。

你可以反匯編第三方庫並重新編譯它,自己簽名。 當然,如果違反任何許可證,或者您不了解第三方庫的許可證(我假設您在使用它時,您不應該這樣做),則不應該這樣做。 也就是說,如果您與第三方聯系,請他們給您簽名版本。

如果您不能要求第三方簽署裝配(或者在許多情況下項目已被放棄),您需要自己簽署裝配。 在線的許多例子,包括Lloyd的答案,有時會在往返過程中引起問題。

ILMerge自身存在風險,在某些項目中可能難以維護。

我編寫了一個應用程序來自動執行任何.NET托管程序集的簽名,以克服所有這些限制並可靠地執行這個看似簡單的任務。 這可以通過UI,命令行或編程API完成,具體取決於您的要求。 您可以在此處閱讀有關該應用程序的更多信息並下載: http//brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM