0

编译后,应用程序清单中存在以下内容,如果我在 VS 中手动发布,则选择的版本是第一个版本,即 3.9.0.3

<asmv1:assemblyIdentity name="MyApp.exe" version="3.9.0.3" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="x86" type="win32" />
<description asmv2:iconFile="Logo.ico" xmlns="urn:schemas-microsoft-com:asm.v1" />
<application />
<entryPoint>
   <assemblyIdentity name="MyApp" version="3.8.0.25806" language="neutral" processorArchitecture="x86" />

相反,如果我尝试在 MSBuild 脚本中运行它并使用

<Target Name="GetVersion">
   <Message Text="Getting version info..."/>
   <GetAssemblyIdentity AssemblyFiles="@(GetVersionAssembly)">
      <Output TaskParameter="Assemblies"
          ItemName="GetVersionAssemblyInfo"/>
   </GetAssemblyIdentity>
   <Message Text="%(GetVersionAssemblyInfo.Version)..."/>
</Target>

其中@(GetVersionAssembly) 是可执行文件的路径,选择3.8.0.25806 版本,如何获取已发布版本而不是MSBuild 中提取的程序集版本,以使其与手动发布相匹配?

4

1 回答 1

0

我最终做的是使用 MSBuild.Community.Tasks 库并在 GetVersion 目标中添加以下行,以允许将发布的版本存储在 version.txt 文件中。不确定是否有一种方法可以在 Visual Studio 中访问发布编号,并在使用 msbuild 发布时增加该编号,如果您在两种发布方式之间切换,这将避免手动更新这些版本。我将其描述为半解决方案,因为它仍然涉及手动步骤。

<Version VersionFile="version.txt" RevisionType="Increment"> <Output TaskParameter="Major" PropertyName="Major" /> <Output TaskParameter="Minor" PropertyName="Minor" /> <Output TaskParameter="Build" PropertyName="Build" /> <Output TaskParameter="Revision" PropertyName="Revision" /> </Version> 

然后,在脚本中,我将所有 %(GetVersionAssemblyInfo.Version) 引用更改为 $(Major).$(Minor).$(Build).$(Revision)

于 2012-12-07T19:02:14.977 回答