Tsh*_*err 6 versioning msbuild tfs tfsbuild
我的任务是在我的公司建立一个新的Team Foundation/Build服务器,我们将开始一个新的项目.目前没有人有TFS的经验,所以我自己学习所有这些.到目前为止一切都在发挥作用; 服务器已经建立,Repository和Team Project已经创建,Build Server已经创建,我创建了一个简单的hello world应用程序来验证源代码控制和持续集成构建(在构建服务器上)正常运行.
但是,我在设置自动版本控制时遇到问题.我已经安装了TfsVersioning项目,它工作正常; 我能够为我的汇编版本定义一种格式.我还没有确定我会用什么格式; 可能是像Major.Minor.Changeset.Revision(我知道在程序集版本中使用变更集编号的潜在问题,所以我可能决定在开始开发之前切换到Major.Minor.Julian.Revision).
问题: 如果自上次构建以来源代码没有更改,我不希望程序集具有新的文件版本.通过持续集成构建,这不是问题,因为构建服务器将只获取已更改的源文件,从而导致仅生成更新模块的增量构建; 将不会构建现有的未更改的模块,因此它们的版本将保持不变.如果我设置每晚构建,我将要清理工作区并执行Build-All.但是,这意味着所有程序集都将具有新版本(假设程序集文件版本包含内部版本号).
一个办法? 这促使我考虑使用程序集文件版本中的最新变更集编号.这样,如果两个连续的Build-All之间没有提交任何内容,则版本不会增加.但是,这意味着更改和提交单个文件会强制所有程序集上的版本增量.
我正在寻找两件事之一:
要么
我可能已经阅读了大约20篇关于这个主题的文章,没有人(除了这个人)似乎解决了这个问题.如果我要求的不是Team Foundation ALM中的常见做法,我该如何解决上面的第二个要点?
谢谢你的时间!
这是我过去做过的事情。该解决方案有两个关键点:
后者是最复杂的,我将在这里起草解决方案。
在自定义 MSBuild 属性中,使用 CustomAfterMicrosoftCommonTargets 在正常的 Visual Studio 编译中注入挂钩
/property:CustomAfterMicrosoftCommonTargets=custom.proj
Run Code Online (Sandbox Code Playgroud)
同时转发版本值
/property:BuildNumber=1.2.3.4
Run Code Online (Sandbox Code Playgroud)
在 custom.proj 中将目标 BeforeCompile 重新定义为类似的内容
<Target Name="BeforeCompile"
Inputs="$(MSBuildAllProjects);
@(Compile);
@(_CoreCompileResourceInputs);
$(ApplicationIcon);
$(AssemblyOriginatorKeyFile);
@(ReferencePath);
@(CompiledLicenseFile);
@(EmbeddedDocumentation);
$(Win32Resource);
$(Win32Manifest);
@(CustomAdditionalCompileInputs)"
Outputs="@(DocFileItem);
@(IntermediateAssembly);
@(_DebugSymbolsIntermediatePath);
$(NonExistentFile);
@(CustomAdditionalCompileOutputs)"
Condition="'$(BuildNumber)'!=''">
<Message Text="*TRACE* BuildNumber: $(BuildNumber)"/>
<MyTasksThatReplaceAssemblyVersion
BuildNumber="$(BuildNumber)"
File="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
您需要有一个任务来替换 AssemblyInfo.cs 源中的 AssemblyFileVersion。MSBuild Extension Pack有一个用于此目的的 AssemblyInfo 任务。
| 归档时间: |
|
| 查看次数: |
4817 次 |
| 最近记录: |