2017-06-27 12 views
3

MSBuild 2.0に引数を渡そうとしています。研究の後、私は変数を使ってこれを行う必要があるように見えますが、私はこれを以下の私のキュー要求にどのように組み込むかを理解できません。私はパラメータを試しましたが、うまくいかないようです。ここで私はMSBuild @ "/ p:OctoPackPackageVersion =" + releaseNumberに伝えようとしていることがあります。これは、IBuildRequest.ProcessParametersを使用したXAMLビルドで機能しました。TFSビルド2.0 C#、howtoビルドに変数を追加する/ Msbuildの引数を渡す

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(); 
+0

XAMLまたはvNextのどのビルドを使用していますか?これをvNextビルドで使用する方法を理解できなかったということでしたか? –

+0

パトリック、私たちは定義をXAMLからスクリプト可能に変更しました(TFS 2015で導入されました)。私がXAMLのビルド定義を使用したとき、IBuildRequest.ProcessParametersを使用して上で挙げたoctoビルドargを渡しましたが、スクリプト可能なビルドでそれを渡す方法はわかりません。上記のコードでは、パラメータフィールドに渡してみますが、ビルドは成功しますが、そのパラメータを調べていないようです。私は下のリンクの他のフィールドを使ってみましたが、どちらもうまくいきません。 https://www.visualstudio.com/en-us/docs/build/define/options –

+0

キューリクエストの用途は何ですか?オクトバージョンのパラメータを渡したいだけでしたか?いくつかのスクリプトを使用できますか?変数の詳細については、下記の私の答えをご覧ください。 –

答えて

2

がレガシーXAMLビルドシステムと異なる場合は、ビルドをキューに直接ビルド定義のタスクを構築するために変数を渡すことはできません。使用したコードは、ビルドをキューに入れる前にビルド定義を更新しました。つまり、変数が変更された場合でもビルド定義が変更され続けることがあります。

これを回避するには、「VAR1」とは、例えば、あなたのビルド定義で変数を追加し、MSBuildのタスクのための引数として、この変数を使用することになります。これにより enter image description here 、あなたは "に値を渡すことができるようになりますビルド定義を更新せずにビルドをキューイングするときは、 "var1"変数を使用します。

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

素晴らしい、私は何かがあることを知っていた欠けていた。ありがとうEddie、これは完全に機能しました。 –

0

最初に、vNextと呼ばれるTFS2015の新しいビルドはMSbuild 2.0をビルドしません。

お探しの商品はBuild variablesです。変数を使用すると、データの重要な部分をビルドプロセスのさまざまな部分に集める便利な方法が得られます。 の変数の場合キュー時間を許可するボックスをチェックすると、チームが手動でビルドをキューイングしたときに値を変更できるようにすることができます。

いくつかのチュートリアルは、変数を使用するための役に立つかもしれ:

+0

ありがとうパトリック、上記のように私は変数を使って渡す必要があることを知ったが、私はpowershellではなくCで行う方法がわからない。キュータイムとしてbuild def仕様に追加しましたが、この変数をQueueBuildAsyncに渡す方法がわかりません。私はドキュメントを見て、私はこれも見つけることができませんでした。 –

+0

@KiritChandranどの引数を渡したいのかよく分かりません。 C#からビルドをキューに入れたいだけでしたか?さらに、古いTFS APIを使用してQueueBuildAsyncを使用している場合は、XAMLビルドと同じです。私はvNextビルドではうまくいかないと思います。多分、これが根本的な原因です。あなたはRest APIを使用する必要があります。このチュートリアル[TEST 2015でREST APIを使用してビルドをトリガする方法](https://stackoverflow.com/questions/31376206/how-to-trigger-a-build-in -tfs-2015-using-rest-api/31385505)&http://tech.en.tanaka733.net/entry/queue-and-cancel-vsts-build-from-csharp –

0

パトリック、私は更新することで、私の問題に対する回避策を見つけることができましたビルドの定義。これは間違いなく理想的ですが、機能します。以下に示すように、私はすでに存在するmsbuild引数に追加しようとしています。あなたがより良い方法を知っているなら、私に知らせてください。私は本当にあなたの質問を見るために時間を割いていただきありがとうございます。 vNextは、システムを構築

public static async Task<string> QueueNewBuild(string project, BuildDefinitionReference targetBuild, string collectionURL, string ChangeSetNumber, string ReleaseNumber, bool CreateRelease) 
    { 
     var buildClient = new BuildHttpClient(new Uri(collectionURL), new VssCredentials(true)); 
     await Task.Delay(1000).ConfigureAwait(false); 
     var buildDef = await buildClient.GetDefinitionAsync(targetBuild.Project.Id, targetBuild.Id); 
     BuildDefinitionVariable OrigMSbuildvar = buildDef.Variables["MSBuildArgs"]; 
     buildDef.Variables["MSBuildArgs"].Value = OrigMSbuildvar.Value + " /p:OctoPackPackageVersion=" + ReleaseNumber.ToString(); 

     await Task.Delay(1000).ConfigureAwait(false); 
     buildDef = await buildClient.UpdateDefinitionAsync(buildDef); 

     await Task.Delay(1000).ConfigureAwait(false); 
     Build build = new Build 
     { 
      Definition = new DefinitionReference 
      { 
       Id = targetBuild.Id 
      }, 
      Project = targetBuild.Project, 
      SourceVersion = ChangeSetNumber 
     }; 

     await Task.Delay(1000).ConfigureAwait(false); 
     var res = await buildClient.QueueBuildAsync(build); 
     buildDef.Variables["MSBuildArgs"].Value = OrigMSbuildvar.Value;   
     await Task.Delay(1000).ConfigureAwait(false); 
     buildDef = await buildClient.UpdateDefinitionAsync(buildDef); 
     return res.Id.ToString(); 

    } 
関連する問題