簡體   English   中英

如何在Visual Studio 2008中將程序集清單添加到C#.NET類庫項目?

[英]How to add assembly manifest to a C# .NET class library project in Visual Studio 2008?

我和Paul一年前遇到的問題類似(請參閱如何將清單添加到.NET DLL中? )。 也就是說,我在Visual Studio 2008中有一個C#類庫項目,它輸出一個dll。 該DLL引用了一些私有程序集,因此我想在dll中添加一個程序集清單,指定那些其他引用的程序集。

我知道如何為可執行文件執行此操作,它只是appName.exe.manifest,當文件包含在項目中時,您可以只選擇它作為項目屬性中的清單。

根據Ruben給Paul的答案(在上面的Stack Overflow線程中),一個清單只適用於exes。 但是,有關清單的Microsoft文檔似乎另有建議(如果我錯了,請糾正我), MSDN程序集清單

程序集清單是一個描述並行程序集的XML文件。 程序集清單描述了程序集的並排程序集,文件和資源的名稱和版本,以及程序集對其他並排程序集的依賴性。 正確安裝,激活和執行並排組件要求組件清單始終伴隨系統上的組件。

由於並行搜索私有程序集的方式,在將DLL打包為私有程序集時,以下命名限制適用。 建議的方法是將程序集清單作為資源放入DLL中。 在這種情況下,資源ID必須等於1,並且專用程序集的名稱可能與DLL的名稱相同。 例如,如果DLL的名稱是Microsoft.Windows.mysample.dll,則清單的assemblyIdentity元素中使用的name屬性的值也可以是Microsoft.Windows.mysample。

另一種方法是將程序集清單放在單獨的文件中。 在這種情況下,程序集的名稱及其清單必須與DLL的名稱不同。 例如,Microsoft.Windows.mysampleAsm,Microsoft.Windows.mysampleAsm.manifest和Microsoft.Windows.Mysample.dll

所以我創建了一個程序集清單assemblyName.manifest作為一個單獨的文件,並將其包含在類庫項目中。 但是當我去項目的屬性時,我得到了與Paul相同的結果,禁用了使用自己的清單的選項。

難道我做錯了什么? 如何將清單添加到程序集中?

你引用的內容對.NET程序集來說是不合適的。 Windows並行緩存用於非托管DLL,與.NET完全等效的是GAC。 此外,編譯器已嵌入對程序集清單中的依賴程序集的引用。 如果在程序集上運行Ildasm.exe,則可以看到它。 雙擊清單,您將看到列出的.assembly指令。

Fwiw,將您自己的Windows清單嵌入類庫中不是問題。 只需使用Project + Add New Item並選擇Application Manifest File模板項。 當然,自動生成的內容對於DLL來說是完全錯誤的,但它確實嵌入在DLL中。 你可以看到通過使用文件+打開+文件,並選擇您的裝配。 您將看到帶有資源ID 2的RT_MANIFEST。只是重申:除非您想要輸入無reg的COM指令,否則不要對托管DLL執行此操作。

暫無
暫無

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

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