2015-01-15 69 views
1

我正在C#中創建一個DLL,我希望在COM中無需註冊就可以看到它。按照其他地方的說明,我在項目中生成了一個新的「app.manifest」文件,並對其進行了編輯,以包含我需要的COM信息,而不是通用的UAC信息。爲什麼Visual Studio 2010不讓我選擇自定義清單?

除Visual Studio不會讓我使用它而不是默認的清單。當我打開項目的屬性,清單下拉菜單被禁用: Note that the manifest dropdown is disabled.

什麼我需要做的選擇&嵌入定製清單,我添加到項目中?

編輯:「app.manifest」文件位於項目的「屬性」文件夾中。如here所述,對於免註冊的COM,我需要將Manifest從嵌入默認清單更改爲在屬性中使用清單。除了因爲某些原因不會讓我改變這個設置。

編輯2:當我將輸出類型更改爲控制檯應用程序或Windows應用程序時,啓用了清單下拉菜單。爲什麼當MSDN明確指出需要使用免註冊COM庫的清單時,它對於類庫是禁用的?

+0

可能的重複http://stackoverflow.com/questions/4084585/how-to-embed-a-manifest-file-at-compile-time-in-visual-studio-2010 – DLeh

+0

@DLeh那裏的答案涵蓋創建清單,我已經完成了。我的問題是它不會讓我嵌入清單。 –

+0

[你做錯了](http://stackoverflow.com/a/27946718/17034)。 –

回答

0

類庫不需要使用該下拉列表來嵌入清單。

重要提示:您將這種方法嵌入到C#庫中的唯一原因就是通過免註冊COM來使用它。如果你不這樣做,你不需要清單,這些步驟不適合你。走開。

如果使用添加 - >新建項目 - >應用程序清單文件到app.manifest文件添加到項目:

scroll down in the New File list to find Application Manifest File

...和保持它在項目的根的屬性,或任何其他子文件夾):

app.manifest must not be nested

...它就會自動嵌入到DLL中。

您可以驗證它是自動通過使用文件添加 - >打開 - >文件打開DLL一旦它的建成並確認它包含一種叫做RT_MANIFEST:

notice the DLL contains an RT_MANIFEST entry

特別感謝Hans Passant提供了所有這些信息,儘管傳播了大約六種不同問題的答案,而不是集中在一個地方。

相關問題