1

我们在 TFS 2012 中有一个包含多个项目的解决方案。我已经在我们的构建服务器上设置了一个持续集成构建,并设置了 Clean Workspace = None。我正在使用 TFS 版本控制模板 2.0 来更新 AssemblyFileVersion 和 AssemblyVersions。

运行构建时,每个项目的 AssemblyInfo.cs 文件都会更新为新的版本号,即使某些项目中的代码没有更改。理想情况下,我们希望仅在项目发生更改时才更改版本。

我正在考虑单独构建每个项目,但我们希望能够简单地构建解决方案。我已经读过 Clean Workspace = None 应该阻止项目被更新,但它似乎并没有发生在我身上,因为所有 dll 上的时间戳在构建后都显示为更改。

我是设置构建过程的新手,所以我希望我做错了一些简单的事情。任何建议将不胜感激。

更新:检查建议的链接后,我似乎在构建过程中做了两件事可能导致问题:1)在我的一个项目的“AfterBuild”步骤中发生的 web.config 文件转换和 2)使用“TFS 版本控制”模板中的版本号增量功能,而无需打开工作流以查看它如何检查更改的文件。我将删除这两个,看看会发生什么。

4

1 回答 1

0

这是一个很好的问题,而且是可能的。我运行使用 TFS API 的 powershell 脚本来确定哪些文件已更改

您还需要获取变更集和搁置集,但是一旦有了这些,您就可以获得您想要的信息,如下所示:

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;

}

于 2015-02-05T19:05:27.017 回答