我正在尝试弄清楚如何在构建过程中关闭循环,我们在构建过程中将版本号应用于AssemblyInfo。*文件。
我们正在从内部部署的tfs迁移到visual studio团队服务。我们当前的许多内部版本都会更新版本号以使其与内部版本号保持同步,并在构建期间将这些文件重新检入源代码控制。
我已成功使用script located on msdn作为示例开始自定义构建过程。
我现在正在尝试将文件检回到源代码管理中,但我收到错误:
#[error]TF30063: You are not authorized to access https://subdomain.visualstudio.com/DefaultCollection.
#[error]Process completed with exit code 100 and had 1 error(s) written to the error stream.
我目前正在使用tf.exe尝试执行此操作。首先获取powershell脚本顶部的工具路径;
# get the tf command line tool path
$tfexe = [System.IO.Path]::GetFullPath($env:VS140COMNTOOLS + "..\..\common7\ide\tf.exe")
if (-Not (Test-Path $tfexe))
{
Write-Error "Could not find tf.exe at '$tfexe'"
exit 1
}
else
{
Write-Host "Found tf.exe at '$tfexe'"
}
然后修改循环以签出文件,然后再检查文件。
# Apply the version to the assembly property files
$files = gci $Env:BUILD_SOURCESDIRECTORY -recurse -include "*Properties*","My Project" |
?{ $_.PSIsContainer } |
foreach { gci -Path $_.FullName -Recurse -include AssemblyInfo.* }
if($files)
{
Write-Host "Will apply $NewVersion to $($files.count) files."
foreach ($file in $files) {
#Write-Host "Attempting to checkout file '$file'"
& ($tfexe) vc checkout $file
$filecontent = Get-Content($file)
attrib $file -r
$filecontent -replace $VersionRegex, $NewVersion | Out-File $file
Write-Host "$file.FullName - version applied"
}
# Checkin pending changes together
##[error]TF30063: You are not authorized to access https://subdomain.visualstudio.com/DefaultCollection.
##[error]Process completed with exit code 100 and had 1 error(s) written to the error stream.
Write-Host "Attempting to checkin files"
$comment = "Applied $NewVersion to $($files.count) files. ***NO_CI***"
& ($tfexe) vc checkin /comment:"$comment" /noprompt
}
这是正确的方法吗?如果构建服务没有被授权访问,那么它是如何获取代码,编译它,然后在某个地方发布工件?
答案 0 :(得分:6)
我不建议每次都检查汇编版本,而是建议使用[assembly: AssemblyVersion("1.2.*")]
通配符支持(我删除[AssemblyFileVersion]
以便它自动匹配。
在构建出现问题后,以多种方式检入已更改的文件:
**NO_CI**
变更集我创建了一个新的构建任务,允许您使用任务签入文件:
使用tfx
控制台将其添加到visualstudio团队基础服务或TFS 2015实例中:
tfx build tasks upload -taskpath path\to\project\root
我仍在努力寻找添加和删除的方法,但是我遇到了客户端对象模型的问题,除了编辑之外没有其他任何问题。
看起来调用tf add
和tf delete
实际上会在构建脚本中与此签入任务结合使用。
了解更多信息:
答案 1 :(得分:3)