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

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

它们是: (appname).exe.manifest(appname).application

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

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

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

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

还要注意一个非常有趣的问题,关于在Vista及其他版本中缓存清单看起来像真正的问题。

另外,在使用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对话框的机会。

它的目的是为了

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