VS程序集生成錯誤-- 引用的程序集“XX”沒有強名稱的解決辦法


通常,我們嘗試編譯引用 COM 互操作程序集的托管程序集或者編譯沒有強名稱的任何其他托管程序集時,您可能會收到下面的錯誤消息:

程序集生成失敗 -- 引用程序集“XX.DLL”沒有強名稱

在官方文檔上,產生的原因是這樣說的:編譯具有強名稱的程序集時,任何被引用的程序集也必須具有強名稱。

提供的解決方案如下:

要在引用 COM 互操作程序集時解決該問題,請按照下列步驟操作: 注意:要在引用沒有強名稱的托管程序集時解決該問題,必須重新生成具有強名稱的程序集。 Microsoft Visual C# .NET

如果 Visual C# .NET 項目引用 COM 互操作程序集,則在您引用 COM 動態鏈接庫 (DLL) 時將為您生成該 COM 互操作程序集。可以在 Visual C# 項目屬性中指定包裝程序集密鑰文件,如下所示:

1.在 Microsoft Visual Studio .NET 中,打開要在其中引用 COM 組件的 Visual C# 項目的屬性。

2.在樹中,單擊“通用屬性”,然后單擊“常規”。

3.在“包裝程序集密鑰文件”字段中,添加密鑰文件。

4.重新生成項目。

Microsoft Visual Basic .NET

如果 Visual Basic .NET 項目引用 COM 互操作程序集,則必須使用 Tlbimp.exe 手動生成 COM 互操作程序集,如下所示:

1.在 Microsoft Visual Studio .NET 中,打開要在其中引用 COM 組件的 Visual Basic 項目的屬性。

2.刪除對 COM 組件的現有引用。

3.在命令提示符處對您的 COM DLL 運行 Tlbimp.exe 以生成具有強名稱的互操作程序集,如下所示: tlbimp.exe MyCOMDLL.dll /keyfile:KeyFile.snk /out:MyCOMInterop.dll

4.向您的 Visual Basic .NET 項目中添加對 Tlbimp.exe 輸出文件的引用。

5.重新生成項目。 如果該程序集被延遲簽名而不是完全簽名,則包裝程序集也必須被延遲簽名。要創建一個被延遲簽名的程序集,請使用 TlbImp.exe 工具生成包裝。為此,請按照以上步驟操作。如果使用“Microsoft Visual Basic .NET”步驟,請修改步驟 3 中提供的命令行,如下所示: tlbimp.exe MyCOMDLL.dll /delaysign /publickey:PublicKeyFile.snk /out:MyCOMInterop.dll

在某個論壇.net問答中也看似到類似一例,現也摘錄於次。

請問“引用的程序集沒有強名稱”這個錯誤該怎么解決?

問: 具體的錯誤提示是這樣的: 程序集生成失敗 -- 引用的程序集“Microsoft.Web.UI.WebControls”沒有強名稱 我的類里面包含了一個TreeView控件: protected Microsoft.Web.UI.WebControls.TreeView tvMenu;

答1: 因為TREEVIEW控件源碼中申明了必須使用強名程序集,所以缺少了簽名文檔后,無法編譯成功。解決方法是:你找到你機器中的SN。EXE文件,然后運行sn -k test.snk ,這樣你就得到了test.snk的簽名文檔,然后在你的項目屬性中,加入test.snk。

答2: 要這樣的嗎,沒用過treeview ,^_^,不過做com+也要用這個的,知道要用,但是不知道為什么要用 

答3: 但我的AssemblyInfo文件里面已經這樣設置了: [assembly:AssemblyKeyFile(@"***.snk")]

答4: 噢,我知道是怎么回事了。 謝謝

在CN布羅格上有這樣的文章,也給出連接以供參閱: 關於程序集生成失敗 -- 引用的程序集沒有強名稱的解決辦法 http://www.cnblogs.com/76674718/archive/2010/11/08/1871837.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM