【发布时间】:2013-05-30 10:53:15
【问题描述】:
在应用程序的 Visual Studio 项目属性中,有一个选项可以“创建没有清单的应用程序”。这个选项在通过ClickOnce部署应用的时候是必须的,但是我不明白这个选项有什么作用,目前我的研究如下……
在禁用该选项并重新编译时,我注意到列出程序集内容的 .NET 程序集清单仍然完好无损并且没有更改。在比较二进制文件时(在Beyond Compare 中使用十六进制比较模式),我注意到这个块已从 EXE 图像的末尾删除:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
我相信这是 MSDN (Application Manifests) 上描述的 Windows 可执行应用程序清单:
应用程序清单是一个 XML 文件,用于描述和标识 应用程序的共享和私有并行程序集 应该在运行时绑定到。
这里奇怪的是,上述 XML 中的应用程序名称和版本似乎具有默认值(MyApp,版本 1.0.0.0),而构建此二进制文件的 Visual Studio 项目定义了正确的名称和版本号,所以 似乎 在我看来,所有 .NET 二进制文件(或 EXE 文件)都嵌入了相同的默认 WindowsEXE 清单。是这样吗?我应该在某处设置这些名称和版本值吗?
【问题讨论】: