我们在TFS 2012中有一个包含多个项目的解决方案。我已经在构建服务器上设置了一个持续集成构建,并设置了Clean Workspace = None。我正在使用TFS版本控制模板2.0来更新AssemblyFileVersion和AssemblyVersions。
运行生成时,即使某些项目中的代码没有更改,每个项目也会使用新版本号更新其AssemblyInfo.cs文件。理想情况下,我们希望仅当项目发生更改时才更改版本。
我在考虑单独构建每个项目,但我们更愿意能够简单地构建解决方案。我读到Clean Workspace = None应该会阻止项目更新,但这似乎并没有发生在我身上,因为所有dll上的时间戳在构建后都显示为更改。
我刚开始建立一个构建过程,所以我希望有一些我做错了的简单的事情。任何建议都将不胜感激。
更新:在检查了建议的链接后,似乎我在构建期间做了两件可能导致问题的事情: 1)在我的一个项目中的"AfterBuild“步骤中进行的web.config文件转换;2)在"TFS Versioning”模板中使用版本号递增功能,而不打开工作流来查看它是如何检查更改的文件的。我将删除这两个代码,看看会发生什么。
发布于 2015-02-06 03:05:27
这是一个很好的问题,也是有可能的。我运行powershell脚本,这些脚本使用TFS API来确定哪些文件发生了更改
您还需要获取变更集和搁置集,但一旦拥有了它们,您就可以获得所需的信息,如下所示:
function Get-ChangesetChanges()
{
[CmdletBinding()]
param ([Parameter(Mandatory=$true)][string]$Changeset,[Parameter(Mandatory=$true)][string]$TFSServer)
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.VersionControl.Client')
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Client')
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($TFSServer)
$vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer])
$vcsChanges = $vcs.GetChangeset($changeset).Changes;
$changes = @();
foreach ($change in $vcsChanges)
{
$changes += $change.Item.ServerItem;
}
$changes;}
https://stackoverflow.com/questions/18156379
复制相似问题