【问题标题】:Is it necessary to change the assemblyIdentity's version attribute in a manifest file?是否有必要在清单文件中更改 assemblyIdentity 的版本属性?
【发布时间】:2011-03-22 20:58:55
【问题描述】:

在以下清单中,如果项目中指定了程序集版本(或者,在我的情况下,设置为 MSBuild 任务的一部分),是否需要更改 assemblyIdentity 元素的 version 属性?

根据this Microsoft Connect page,它看起来 项目的版本号覆盖了清单的版本号。如果我错了,请纠正我...

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" 
                xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" 
                xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="MyApp.exe" type="win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

【问题讨论】:

    标签: assemblies version manifest


    【解决方案1】:

    程序集信息的重点是向 Windows 及其组件唯一标识您的应用程序。这类似于 .NET 如何使用文件名 + 版本 + 生成的 ID + 目标处理器架构来唯一标识程序集。

    如果您选择不更改它,那么 Windows 组件可能不会将您的应用程序的新版本视为与旧版本的唯一不同。

    有关Application Manifests MSDN page的更多信息。

    【讨论】:

      【解决方案2】:

      根据微软的documentation,看来是,必须指定确切的版本号:

      程序集版本

      2021 年 1 月 7 日

      版本必须在assemblyIdentity元素中指定 表现出来。使用四部分版本格式:mmmmm.nnnnn.ooooo.ppppp

      这个参考没有例外;例如,你不能使用mmmmm.nnnnn.*.* 或类似的东西,它必须是准确的。


      我已尝试加载在清单中指定了旧版本的较新 DLL。这失败并出现错误:

      “应用程序无法启动,因为它的并排 配置不正确”

      使用 sxstrace 我可以看到详细的错误是 ERROR: Component identity found in manifest does not match

      这是完整的跟踪 (最后 4 行是关键部分)

          INFO: Resolving reference SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.21177".
              INFO: Resolving reference for ProcessorArchitecture msil.
                  INFO: Resolving reference for culture Neutral.
                      INFO: Applying Binding Policy.
                          INFO: No binding policy redirect found.
                      INFO: Begin assembly probing.
                          INFO: Did not find the assembly in WinSxS.
                          INFO: Attempt to probe manifest at C:\Program Files (x86)\folder\SomeAssemblyName.DLL.
                          INFO: Manifest found at C:\Program Files (x86)\folder\SomeAssemblyName.DLL.
                      INFO: End assembly probing.
      
          INFO: Parsing Manifest File C:\Program Files (x86)\folder\SomeAssemblyName.DLL.
              INFO: Manifest Definition Identity is SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.30356".
              ERROR: Component identity found in manifest does not match the identity of the component requested. 
                 Reference is SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.21177". 
                 Definition   SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.30356".
          ERROR: Activation Context generation failed.
      

      所以它找到程序集并比较版本,当它们不匹配时,它会拒绝它。

      【讨论】:

        猜你喜欢
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 2018-02-10
        • 2016-02-19
        • 1970-01-01
        • 2014-10-01
        相关资源
        最近更新 更多