TFS Build 2.0 C#,如何向 build/Pass Msbuild args 添加变量

Kir*_*ran 5 tfs build tfs-2015

我正在尝试将参数传递给 MSBuild 2.0。经过研究,似乎我需要使用变量来执行此操作,但我无法弄清楚如何将其合并到下面的队列请求中。我试过参数,但这似乎不起作用。这是我想告诉 MSBuild @" /p:OctoPackPackageVersion=" + releaseNumber. 这适用于使用 IBuildRequest.ProcessParameters 的 XAML 构建。

var buildClient = new BuildHttpClient(new Uri(collectionURL), new 
VssCredentials(true));
var res = await buildClient.QueueBuildAsync(new Build
            {
                Definition = new DefinitionReference
                {
                    Id = targetBuild.Id
                },
                Project = targetBuild.Project,
                SourceVersion = ChangeSetNumber,
                Parameters = buildArg

            });
            return res.Id.ToString();
Run Code Online (Sandbox Code Playgroud)

Edd*_*SFT 4

vNext 构建系统与旧版 XAML 构建系统不同,在对构建进行排队时,您无法直接将变量传递给构建定义中的构建任务。您使用的代码在将构建排队之前更新了构建定义,这意味着如果变量发生变化,构建定义可能会不断变化。

解决方法是在构建定义中添加一个变量,例如“var1”,然后使用该变量作为 MSBuild 任务的参数: 在此输入图像描述 这样,您将能够在对构建进行排队时将值传递给“var1”变量,而无需更新构建定义。

Build build = new Build();
build.Parameters = "{\"var1\":\"/p:OctoPackPackageVersion=version2\"}";

// OR using Newtonsoft.Json.JsonConvert
var dict = new Dictionary<string, string>{{"var1", "/p:OctoPackPackageVersion=version2"}};
build.Parameters = JsonConvert.SerializeObject(dict)
Run Code Online (Sandbox Code Playgroud)