.net 从MSBUILD脚本获取次要和主要版本
我正在使用Msbuild编译和生成.zip文件和安装程序,我需要assembyInfo的版本号 我正在使用这个代码.net 从MSBUILD脚本获取次要和主要版本,.net,msbuild,assemblyinfo,.net,Msbuild,Assemblyinfo,我正在使用Msbuild编译和生成.zip文件和安装程序,我需要assembyInfo的版本号 我正在使用这个代码 <Target Name="getversion"> <GetAssemblyIdentity AssemblyFiles="$(BuildDir)\myprogram.exe"> <Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/> <
<Target Name="getversion">
<GetAssemblyIdentity AssemblyFiles="$(BuildDir)\myprogram.exe">
<Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/>
</GetAssemblyIdentity>
<Message Text="Version = %(fooAssemblyInfo.Version)"/>
</Target>
但这将返回Version=2.0.0.29110,我只需要次要和主要版本
有没有办法在没有自定义任务的情况下读取assembyInfo.cs信息?最后,我使用了不需要额外任务库的代码
<Target Name="getversion">
<GetAssemblyIdentity AssemblyFiles="$(BuildDir)\myfile.exe">
<Output TaskParameter="Assemblies" ItemName="myAssemblyInfo"/>
</GetAssemblyIdentity>
<PropertyGroup>
<Pattern>(\d+)\.(\d+)</Pattern>
<In>%(myAssemblyInfo.Version)</In>
<OutVersion>$([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern)))</OutVersion>
</PropertyGroup>
</Target>
(\d+)\(\d+)
%(myAssemblyInfo.Version)
$([System.Text.RegularExpressions.Regex]::匹配($(In),$(Pattern)))
如果您使用的是MsBuild 4.0,您可以自己编写来完成此任务
<UsingTask
TaskName="GetVersionParts"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<AssemblyPath ParameterType="System.String" Required="true" />
<MajorVersion ParameterType="System.Int32" Output="true" />
<MinorVersion ParameterType="System.Int32" Output="true" />
<BuildVersion ParameterType="System.Int32" Output="true" />
</ParameterGroup>
<Task>
<Using Namespace="System.Diagnostics" />
<Code Type="Fragment" Language="cs">
<![CDATA[
Log.LogMessage("Getting version details of assembly at: " + this.AssemblyPath, MessageImportance.High);
Version v = Version.Parse(FileVersionInfo.GetVersionInfo(this.AssemblyPath).FileVersion);
this.MajorVersion = v.Major;
this.MinorVersion = v.Minor;
this.BuildVersion = v.Build;
]]>
</Code>
</Task>
</UsingTask>
然后在构建脚本的其他地方引用内联任务
<GetVersionParts AssemblyPath="$(OutputDirAbsolute)/MyAssembly.dll">
<Output TaskParameter="MajorVersion" PropertyName="MajorVersionNumber" />
<Output TaskParameter="MinorVersion" PropertyName="MinorVersionNumber" />
<Output TaskParameter="BuildVersion" PropertyName="BuildVersionNumber" />
</GetVersionParts>
使用内联任务,您可以轻松访问部件生成号的每个部分。e、 g$(MajorVersionNumber)可以使用以下所述的MSBuild属性函数完成此操作:
使用内联代码并使其成为您需要的两个数字提供一个示例@stijn?@DavEvans Carlos发布的答案正好是:它使用C#regex只获取前两个数字对于像我这样有问题的人,我必须包含Microsoft.Build和Microsoft.Build.Framework的引用,否则,它给了我一个空字符串。你如何引用Microsoft。wixproject中的Build?对我不起作用。只返回空字符串。无法添加Microsoft.Build,因为我的项目适用于.NET Framework 2.0谢谢!!Спасибо!))Alex,Пжжааааааа
<Target Name="getversion">
<GetAssemblyIdentity AssemblyFiles="$(BuildDir)\myprogram.exe">
<Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/>
</GetAssemblyIdentity>
<Message Text="Version = $([System.Version]::Parse(%(fooAssemblyInfo.Version)).ToString(2))" Importance="high" />
</Target>
Done executing task "GetAssemblyIdentity".
Task "Message"
Task Parameter:Text=Version = 12.0
Task Parameter:Importance=high
Version = 12.0
Done executing task "Message".