app.manifest和assemblyInfo.cs版本号是否需要app.manifest?

时间:2016-09-08 12:28:29

标签: c# manifest assemblyinfo

我已经在app.manifest上做了很多阅读,但我没有得到它。好吧,我确实让你需要它,例如:<requestedExecutionLevel level="asInvoker" uiAccess="false" />,我们确实需要和使用它。但也有这个:

<assemblyIdentity
  name="ModuleSimulator"
  processorArchitecture="*"
  version="1.0.2.1"
  type="win32"/>

这就是我没有得到的部分,我可以把它留下来,没有任何后果吗?我们已经有一个AssemblyInfo.cs,其中包含所有包含版本的程序集详细信息:

[assembly: AssemblyVersion("1.0.2.2")]
[assembly: AssemblyFileVersion("1.0.2.2")]
[assembly: AssemblyInformationalVersion("R165Fv001r02")]
[assembly: NeutralResourcesLanguageAttribute("en")]

我们正在瞄准Windows 7(目前),但我们可能会在未来开始支持Windows 10。因此,如果AssemblyInfo.cs确保以正确的方式编译程序集,那么清单文件中的assemblyIdentity有什么用处。

我确实意识到这已经被问到了,但我似乎并不理解它。

我认为我理解的是: app.manifest也被windows app-store使用..验证?应用程序。 (当然,检查应用程序是否可以运行,因为支持的操作系统版本和执行级别),但我在谈论assemblyIdentity,我不太了解。

1 个答案:

答案 0 :(得分:3)

应用程序清单是纯粹的非托管实现细节。 C#编译器确保它作为最终可执行文件中的非托管资源嵌入。你在使用File&gt;时可以看到的东西打开&gt;提交并选择EXE文件。

它必须是不受管理的,因为操作系统会读取它。只是可以存储在可执行文件格式中的其他配置。一种难以改变的格式,太多现有程序与可执行文件混在一起会被它瘫痪。

您不应该忽略AssemblyIdentity元素,SDK文档要求有效清单始终有一个元素。它不会在.NET程序中使用,因为它只在查找非托管DLL中起作用。因此,内容实际上并不重要,您可以使用项目模板生成的样板文件。

操作系统不了解有关.NET属性的bean,只有CLR可以读取它们。您列出的那些实际上已被C#编译器使用,再次创建非托管资源。它是VERSION资源,当您查看EXE文件时也可以看到它。它填写了Details属性表的详细信息,即使用Explorer查看文件属性时看到的属性表。该资源也是.NET FileVersionInfo类使用的资源。超级重要的[AssemblyVersion]属性不可见,非常不方便。

Store应用程序中的appx清单是一个完全不同的鱼。操作系统再次是一个非托管的细节,用它来弄清楚如何将商店应用程序包部署到用户的机器上。瓷砖看起来像什么。它需要什么样的功能对沙箱很重要。