我们在TFS 2012中有一个包含多个项目的解决方案。我在构建服务器上设置了持续集成构建,并设置了Clean Workspace = None。我正在使用TFS版本控制模板2.0来更新AssemblyFileVersion和AssemblyVersions。
运行构建时,即使在某些项目中没有对代码进行任何更改,每个项目的AssemblyInfo.cs文件也会更新为新的版本号。理想情况下,我们希望只有在项目发生变化时才能更改版本。
我正在考虑单独构建每个项目,但我们希望能够简单地构建解决方案。我已经读过Clean Workspace = None应该阻止项目更新但是它似乎不会发生在我身上,因为所有dll的时间戳在构建后显示为已更改。
我是建立构建过程的新手,所以我希望有一些简单的事情我做错了。任何建议都将不胜感激。
更新: 在检查建议的链接之后,似乎我在构建期间做了两件可能导致问题的事情:1)web.config文件转换发生在我的一个项目中的“AfterBuild”步骤中,2)使用“TFS版本控制”模板中的版本号增量功能,无需打开工作流以查看它是如何检查已更改的文件。我将删除这两个,看看会发生什么。
答案 0 :(得分: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;
}