【问题标题】:Open VSTFS Link in Visual Studio by PowerShell Script通过 PowerShell 脚本在 Visual Studio 中打开 VSTFS 链接
【发布时间】:2015-07-13 13:50:52
【问题描述】:

我尝试通过 PowerShell 脚本在 VisualStudio 中打开成功构建的详细信息页面。我能够连接到我的测试项目和某个 Builddefinition 的集合。我为每个构建都有一个 vstfs-Link 但如何在 Visual Studio 中打开此链接? 我尝试使用 EncodeUri、GetArtifactUrl 和 GetArtifactUrlExternal。对于 GetArtifactUrl,我收到此错误:

无法转换参数“artId”,值为:“vstfs:///Build/Build/12345”,为“GetArtifactUrl”键入“Microsoft.TeamFoundation.ArtifactId”:“无法转换“vstfs:///要键入的“System.Uri”类型的 Build/Build/12345" 值 “Microsoft.TeamFoundation.ArtifactId”。”

谁能给我一些建议,如何将 vstfs 链接转换为我可以在 VisualStudio 中打开的东西?

谢谢

[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Common")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.TeamFoundation")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.TeamFoundation.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.TeamFoundation.VersionControl")

$uri = [URI]"http://MyServer:8080/tfs/DefaultCollection"
$project = "MyProject"
$buildDefinition = "MyBuildDefinition"

# CONNECT
$collection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($uri)

# BUILDS
$buildServer = $collection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$buildSpec = $buildServer.CreateBuildDetailSpec($project, $buildDefinition)

$ILinkingService = $collection.GetService([Microsoft.Teamfoundation.ILinking])
$CommonService = $collection.GetService([Microsoft.TeamFoundation.Common])

# QUERY
$buildSpec.InformationTypes = $null
$buildSpec.MaxBuildsPerDefinition = 5
$buildSpec.QueryOrder = [Microsoft.TeamFoundation.Build.Client.BuildQueryOrder]::FinishTimeDescending
$results = $buildServer.QueryBuilds($buildSpec)

foreach($build in $results.Builds)
{
    Write-Host $build.Status
    #$testUrl = $ILinkingService.GetArtifactUrl($build.Uri)
    $testUrl = $CommonService.EncodeUri($build.Uri)
    Write-Host $testUrl
}

【问题讨论】:

    标签: visual-studio powershell tfs


    【解决方案1】:

    首先,要在 Visual Studio 中打开构建详细信息,您只需将 $build.Uriurl 参数结合使用即可:

    $testUrl = $build.Uri.AbsoluteUri + "?url=" + $uri.AbsoluteUri
    


    如果要在浏览器中打开构建详细信息,可以使用ILinking.GetArtifactUrl,但必须明确指定重载:

    $testUrl = $ILinkingService.GetArtifactUrl( [string] $build.Uri)
    

    也许更好的是使用TswaClientHyperlinkService

    $waLinkingService = $collection.GetService([Microsoft.TeamFoundation.Client.TswaClientHyperlinkService])
    ...
    $waLinkingService.GetViewBuildDetailsUrl($build.Uri)
    

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 2019-02-24
      • 2021-10-04
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多