从清单中获取asmv1:assemblyIdentity

时间:2012-12-05 20:54:00

标签: c# visual-studio msbuild clickonce

编译后,应用清单中会出现以下内容,如果我在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中提取的程序集版本,以使其与手动发布相匹配?

1 个答案:

答案 0 :(得分: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)