26

我很好奇是否需要在发布应用程序时创建两个清单文件。当我删除它们时它会起作用。在需要它们的情况下,我尝试嵌入(项目>应用程序>使用默认设置嵌入清单),但它们仍然是外部的。

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

4

3 回答 3

16

清单文件描述了您的应用程序应该如何运行。来自MSDN

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

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

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

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

于 2009-11-29T11:32:27.870 回答
6

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

于 2009-11-29T11:41:10.060 回答
1

需要它的目的

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

于 2009-11-29T11:30:42.017 回答