2009-11-29 32 views
16

我很好奇我是否需要在發佈我的應用程序時創建的兩個清單文件。它在我刪除它們時起作用。在需要的情況下,我試圖嵌入(Project> Application> Embed manifest with default setting),但它們仍然是外部的。C# - 我需要清單文件嗎?

這些都是:(appname).exe.manifest(appname).application

回答

1

這是需要for the purpose of

指定組件的版本要求和安全標識, 並定義組件的 範圍和解決 引用資源和類

14

所需的所有元數據清單文件描述了應用程序應該如何運行。從MSDN

每個組件,不論是靜態還是動態的,包含數據的集合,描述在裝配中的元素是如何相互關聯的。程序集清單包含這個程序集元數據。程序集清單包含指定程序集的版本要求和安全標識所需的所有元數據,以及定義程序集範圍和解析對資源和類的引用所需的所有元數據。程序集清單可以存儲在帶有Microsoft中間語言(MSIL)代碼的PE文件(.exe或.dll)中,也可以存儲在僅包含程序集清單信息的獨立PE文件中。

因此刪除它們可能是錯誤的做法,特別是如果您希望您的應用程序在Vista及更高版本上默認運行。

Here是從細節上MSDN使用MT的工具,它是用來嵌入體現在您的應用程序。

還要注意關於Vista和超出看起來像一個真正的疑難雜症清單的緩存a really interesting issue

5

此外,返回時用VS2003,你想使你的控件看起來更像XP界面,清單將包含相應的版本6.x這是伴隨着你的應用程序中使用的通用控件,那麼GUI獲得了「XP更新的外觀和感覺」,而不是舊的笨重的Windows 2000控件。出於這個原因,你可以將manifest作爲一個資源嵌入,所以你不必在manifest文件周圍拖延(好吧,它是一個非常小的文件),但是,它使得應用程序分佈更加整潔。其中,如果清單是在你的應用程序中使用

而且也有在.NET 1.1運行時(現在固定在2.0+)中的錯誤無法更新GUI給它更多的XP的外觀和感覺。當時的解決方法是調用Application.DoEvents做一個Application.Run之前(新形式());

現在,在Vista和Win 7中,清單被用來指定提升的權限來繞過UAC,從而最小化Vista/Win 7不得不彈出UAC對話框的機會。

+0

順便說一句,如何嵌入它們? – Petr 2009-11-29 12:04:55

+3

它不會最小化出現UAC對話框的機會 - 如果您指定應用程序需要管理員權限(其中大多數不需要,請不要這麼做),它會強制它始終顯示。 – Zooba 2009-11-29 12:11:55

+0

我想分發只有一個EXEcutable文件(和設置文件)...所以如何可以嵌入清單?應用程序中的選項不會這樣做。 – Petr 2009-11-29 12:13:47