use*_*852 0 versioning msbuild wix visual-studio-2010 jenkins
这是我的情况:
我有 VS2010 解决方案,其中包含 X 项目。
Wix 项目可以从所有编译的工件创建 msi。
我有构建机器\ Jenkins,首先编译(MSBuild .Net 4)所有解决方案,然后编译wix以将其打包到msi。
我如何将产品编号(例如 11.2.0.4789)注入到所有工件\dll中 - 尽可能简单?
编译解决方案时是否可以传递命令行参数?
有一些工具(例如 MSBuild 的几个扩展)可以进行版本标记,但每个工具都采用特定的工作流程。您可能会找到适合您的解决方案,但 DIY 方法可以帮助您评估它们,即使这不是您的最终解决方案。
您可以将属性添加到 MSBuild 命令行,如下所示:
msbuild /p:VersionStamp=11.2.0.4789
Run Code Online (Sandbox Code Playgroud)
注意:我假设您将以某种方式参数化 Jenkins 构建或在前面的构建步骤中生成数字。这是一个模拟:
echo 11.2.0.4789 >version.txt
set /p version=reading from pipe <version.txt
msbuild /p:VersionStamp=%version%
Run Code Online (Sandbox Code Playgroud)
现在的工作是让每个项目都使用它。这取决于项目类型以及您希望 VersionStamp 出现的位置。
对于 csproj,您可能希望将其用作 AssemblyVersion。最简单的办法就是把属性自己移到一个cs文件中,每次都重写。我会在 AssemblyInfo.cs 中留下评论,作为它现在来自何处的线索。您可以动态或永久地将 cs 文件包含在项目中。我更喜欢动态,因为它实际上是构建的中间文件。因此,在 .csproj 中的文本编辑器中添加以下内容(例如 Visual Studio。卸载和编辑项目):
<Target Name="BeforeBuild">
<PropertyGroup>
<AssemblyVersionPath>$(IntermediateOutputDir)AssemblyVersion.cs</AssemblyVersionPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(AssemblyVersionPath)" />
</ItemGroup>
<WriteLinesToFile
File='$(AssemblyVersionPath)'
Overwrite="true"
Condition="'$(ProductVersion)' != ''"
Lines='using System.Reflection%3b;
[assembly: AssemblyVersion("$(VersionStamp)")]' />
</Target>
Run Code Online (Sandbox Code Playgroud)
这已经足够了,但更彻底的解决方案包括将文件添加到列表中,以便与其他文件一起清理,并且仅在版本更改时才写入文件,以防止不必要的重建等。
对其他项目类型使用类似的技术。
归档时间: |
|
查看次数: |
2355 次 |
最近记录: |