Visual Studio 2022 未列在 DevOps 构建解决方案管道任务中

Blu*_*BSH 13 azure-devops azure-pipelines azure-pipelines-tasks visual-studio-2022

我在构建管道中有一个 Azure DevOps 2020.1.1 的本地实例 我有一个构建解决方案任务,在构建 .NET6 项目时,该任务将 Visual Studio 版本设置为“最新”,这失败了,当然不支持 .NET6因为它似乎识别的最新版本是 2019,所以 2022 甚至没有列在 Visual Studio Verios 下拉列表中。

我已在服务器上安装了 Visual Studio 2022,构建代理可以看到它(它们已更新到最新的代理版本)。

如何让最新的 Visual Studio 版本在构建解决方案任务中显示为 2022?据我所知,微软还没有为此发布任何本地服务器的更新,有没有办法添加它或让它找到它?

Gün*_*ein 11

技巧是使用 MSBUILD 任务并从版本切换到指定位置,然后插入 VS2022 的 msbuild.exe 的路径,例如 C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\ msbuild.exe。

编辑:

另一种方法是使用命令行任务并直接调用可执行文件。如果您需要完整的 VS 开发环境来构建应用程序,请在“工具”字段中指定可执行文件的路径,例如“C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\devenv.com”并在参数字段中指定解决方案和配置,例如“MySolution.sln /build“Release|Any CPU”。


小智 6

看下面的截图: 在此输入图像描述

请确保 MSBuild.exe 任务中的路径正确


jes*_*ing 4

您可以自己构建 Microsoft 的任务,并使用 tfx-cli 将这些任务直接推送到您的项目集合中。您还可以创建包含这些更新任务的扩展并将其安装到您的集合中。

要构建任务,您可以在 PowerShell 7 中运行此脚本:

$tasksToBuild = @("VSBuildV1", "VsTestV1", "VsTestV2", "VsTestPlatformToolInstallerV1", 
                  "MSBuildV1", "DotNetCoreInstallerV1", "DotNetCoreCLIV2")

$outputDir = md _build -force

$extensionManifest = gc "vss-extension.json" | ConvertFrom-Json
$extensionManifest.contributions = @()

& git clone https://github.com/microsoft/azure-pipelines-tasks.git --quiet
cd azure-pipelines-tasks

& git config --local pager.branch false
$branches = & git branch -r
$version = (($branches | Select-String -pattern "(?<=origin/releases/m)\d+$").Matches) | %{ [int32]$_.Value } | measure-object -maximum
$version = $version.Maximum

& git reset --hard origin/releases/m$version

npm install

Write-Host "Building tasks..."
foreach ($task in $tasksToBuild)
{
    Write-Host "Building $task..."
    & node make.js build --task $task
    Write-Host "Building $task done."
    
    $taskDir = "$outputDir/$task"
    copy "./_build/Tasks/$task" $taskDir -Recurse

    Write-Host "Updating contributions..."
    $extensionManifest.contributions += @{
        "id" = "$task"
        "type" = "ms.vss-distributed-task.task"
        "targets" = @("ms.vss-distributed-task.tasks")
        "properties" = @{
            "name" = "_build/$task"
        }
    }
}

cd ..

$extensionManifest.version = "1.$version.0"
$extensionManifest | ConvertTo-Json -depth 100 | Out-File "vss-extension.json" -Encoding utf8NoBOM

& npm install tfx-cli -g
& tfx extension create --manifests vss-extension.dev.json vss-extension.json --output tasks.vsix
Run Code Online (Sandbox Code Playgroud)

从:

运行此脚本时,请确保文件夹中有可用的扩展清单。您可以查看此存储库的示例:

将 的内容替换build.ps1为上面的脚本,使用您自己的发布者和扩展 ID 更新 vss-extension.*.json 文件,它应该会为您生成一个扩展。

这样,您将获得 Microsoft 在最新版本的 Azure DevOps(云)中发布的确切任务的副本。

我已在我的博客上记录了这些步骤以及其他一些选项