2009-12-14 51 views
9

我有一個c#類庫項目,它使用在系統上註冊的COM DLL。我現在想要將COM DLL部署爲並排組合,因此我不必註冊它,也不會干擾可能使用不同版本DLL的其他應用程序。如何將清單添加到.NET DLL?

我已經添加app.manifest到c#項目使用添加新項目菜單,但我不知道下一步該怎麼做。在項目屬性/應用程序/圖標和清單中,禁用清單下拉菜單。我不知道如何克服這一點。我已經添加了一個清單文件,爲什麼它不在下拉列表中?

我有一個與C++應用程序一起工作的COM DLL的清單,我想我保持原樣。現在我需要知道如何編輯c#項目的app.manifest。我將從添加一個已知的良好依賴元素開始。但我需要一個關於如何設置這個的教程,我沒有看到它覆蓋任何地方。我使用VS2008

+1

我看到一個exe項目啓用了清單框。類庫項目是否永遠不會顯示清單? – 2009-12-14 09:01:11

回答

10

您絕對可以在.net dll中嵌入清單。應用程序清單的內容並不都適用於程序集,但有些程序可以。例如,UAC條目對組件清單沒有意義,但是assemblyIdentity可以。

使用MT.EXE工具,可以嵌入清單成DLL:

嵌入:

mt.exe -manifest filename.dll.manifest -outputresource:filename.dll;#2 

提取物:

mt.exe -inputresource:filename.dll;#2 -out:filename.dll.extracted.manifest 

以下是相關信息的更多鏈接:

另一個DLL嵌入示例:http://msdn.microsoft.com/en-us/library/ms235591(v=VS.100).aspx

一個SxS演練:http://msdn.microsoft.com/en-us/library/ms973915.aspx

2

在大多數應用中

,清單通常適用於EXE文件/主機的應用程序 - 因爲這是在哪一個瞭解所有相關組件及其能力如何齧合在一起的水平。

例如,在通過trustinfo/security/requestedPrivileges/requestedExecutionLevel元素設置UAC標記的情況下,依賴程序集合法地能夠說「我說我們都瞭解UAC」的情況不會使感。

+0

是的,我發現了。你知道任何關於操作系統清單緩存嗎? – 2009-12-16 16:30:12

+0

對不起,不知道什麼關於緩存(OTTOMH猜測:並非所有隻是在加載時讀出EXE的資源,任何緩存將是透明的 - 我猜你不會問這是否是直截了當!) – 2009-12-16 17:23:24

+2

這是不正確的。 DLL可以包含並激活清單。它只需要使用激活上下文API手動完成。 – 2013-08-01 08:20:15