C# - 我需要清单文件吗?

时间:2009-11-29 10:50:33

标签: c# manifest

我很好奇是否需要在发布应用程序时创建的两个清单文件。它删除它时有效。在他们需要的情况下,我试图嵌入(Project> Application> Embed manifest with default setting),但它们仍然在外部。

这些是:(appname).exe.manifest(appname).application

3 个答案:

答案 0 :(得分:14)

清单文件描述了应用程序的运行方式。来自MSDN

每个程序集(无论是静态的还是动态的)都包含一组数据,这些数据描述了程序集中的元素如何相互关联。程序集清单包含此程序集元数据。程序集清单包含指定程序集的版本要求和安全标识所需的所有元数据,以及定义程序集范围和解析对资源和类的引用所需的所有元数据。程序集清单可以存储在带有Microsoft中间语言(MSIL)代码的PE文件(.exe或.dll)中,也可以存储在仅包含程序集清单信息的独立PE文件中。

因此,删除它们可能是错误的,特别是如果您希望应用程序默认在Vista及更高版本上运行。

Here是MSDN在使用mt工具时的详细信息,该工具用于在应用程序中嵌入清单。

另请注意a really interesting issue有关在Vista及其他地方缓存清单的内容,看起来像是真正的问题。

答案 1 :(得分:5)

此外,在使用VS2003时返回,并且您希望使控件看起来更像XP界面,清单将包含具有相应版本6.x的公共控件,该控件与您的应用程序一起使用,然后是GUI得到一个“很好的更新的XP外观和感觉”,而不是旧的笨重的Windows 2000控件。出于这个原因,您可以将清单嵌入为资源,这样您就不必使用清单文件(好吧,它是一个非常小的文件)但是,它使应用程序分发更加整洁。

此外,.NET 1.1运行时中存在一个错误(现已修复为2.0+),如果在您的应用程序中使用清单,则无法更新GUI以使其具有更多XP外观。当时的解决方法是在执行 Application.Run(new form())之前调用 Application.DoEvents ;

现在,使用Vista和Win 7,清单用于指定提升权限以绕过UAC,从而最大限度地减少Vista / Win 7必须弹出UAC对话框的机会。

答案 2 :(得分:1)

需要for the purpose of

  

指定程序集的版本要求和安全标识,   和定义所需的所有元数据   组装范围和解决方案   对资源和类的引用