2016-08-12 84 views
0

我正在開發一個C#.NET程序集(名稱:A.exe時)需要被延遲簽名,然後由第三方公司簽署全面。爲了延遲登錄,我使用公鑰。 程序集引用程序集B.Core.dll,B.Common.dll,B.Logging.dll,它們是公共庫的一部分。 B組件沒有延遲簽名,所以我使用ildasm/ilasm來拆卸它們並重新組裝延遲簽名。 我提交A.exe時和B.Core.dll,B.Common.dll,B.Logging.dll和他們現在完全簽名,然而,當它開始與錯誤抱怨:

無法加載文件或程序集「 Assembly B1 PublicKeyToken = null'

該問題不應與A.exe相關,因爲它引用了延遲簽名的程序集(它們的Strong Name屬性設置爲True),但我懷疑罪魁禍首是B.Core。
的確,B.Core引用了B.Common和B.Logging,而B.Common和B.Logging是相互獨立的。
錯誤的原因可能是B.Core使用非簽名B.Common裝配初步建成,然後拆卸和重新組裝所有三個組件並沒有改變引用... 爲了解決這個問題,我想要做的是將所有四個程序集合併爲一個延遲簽名程序集,作爲A的後期構建步驟。您認爲它會起作用嗎?
有一點要記住的是,B.Core使用.NET MEF動態加載導出接口從A請問這個過程中出現任何問題?

預先感謝您的幫助延遲簽名的程序集鏈

+0

正確的方法來表示你的問題解決了是接受一個答案(通過選擇複選標記,解決你的問題的答案旁)。有*沒有問題*自己發佈答案(雖然有一段時間才能接受它)。簡單的規則是問題屬於問題,答案屬於答案。我建議你從問題的底部提取答案,將答案*作爲答案*並在適當時間內接受答案。 –

+0

謝謝,我遵循了你的建議。 – peval27

回答

0

我找到了解決辦法:我設法使用ILMerge四個組件合併成一個,因此一切都按預期。即使調試符號被「合併」成單個PDB文件(訣竅是在相應程序集的相同文件夾中有B.Core.pdb,B.Common.pdb和B.Logging.pdb)。

MEF所做的工作,從無怨言。