web-dev-qa-db-ja.com

TFS 2012でc#6.0をビルドする

Visual Studio 2015をビルドエージェントにインストールせずに、TFS 2012でC#6.0機能を使用してVisual Studio 2015ソリューションをビルドするにはどうすればよいですか(Microsoft Build Tools 2015 RCを使用)

すでにMSBuildツールをインストールしましたが、それでも例外が発生します。ビルドテンプレートにMSBuild14を使用するように指示するにはどうすればよいですか(1つのプロジェクトのみ)

また、BuildAgentにVisual Studio 2012のみがインストールされているのに、TFS 2012が非同期でコンパイルして(c#5.0)問題なく待機するのはなぜですか?

BuildProcessTemplateのToolPathをMSBuild/14.0 /に変更しようとしましたが、ビルドエラーが発生します。

C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.targets(316):「csc2.exe」はコード-532462766で終了しました。

Microsoft.Net.Compilers 1.0.0-rc2コンパイラをインストールすると、同じエラーが発生します。

コマンドラインを使用してプロジェクトをコンパイルすると、まったく同じエラーが発生します。ただし、まったく同じ引数を使用してコマンドラインを使用すると、開発マシンでエラーは発生しません。

これは、コマンドラインで取得する例外です。

C:\Program Files (x86)\MSBuild\14.0\bin\csc2.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:Prompt /warn:4 /define:TRACE /highentro.....
     Unhandled Exception: System.InvalidProgramException: Common Language Runtime detected an invalid program.
        at System.Collections.Immutable.SecurePooledObject`1.Use[TCaller](TCaller& caller)
        at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator.PushLeft(SortedInt32KeyNode`1 node)
        at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator..ctor(SortedInt32KeyNode`1 root)
        at System.Collections.Immutable.ImmutableDictionary`2.Enumerator..ctor(SortedInt32KeyNode`1 root, Builder builder)
        at Microsoft.CodeAnalysis.RuleSet.GetDiagnosticOptionsFromRulesetFile(Dictionary`2 diagnosticOptions, String resolvedPath, IList`1 diagnosticsOpt, CommonMessageProvider messageProviderOpt)
        at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.Parse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.CommonParse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CommonCompiler..ctor(CommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CSharp.CSharpCompiler..ctor(CSharpCommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc..ctor(String responseFile, String baseDirectory, String[] args)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.Run(String[] args)
        at Microsoft.CodeAnalysis.BuildTasks.BuildClient.RunWithConsoleOutput(String[] args, RequestLanguage language, Func`2 fallbackCompiler)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc2.Main(String[] args)
22
Console

TFS2013 U5を使用しましたが、同じになります。

  • buildServerマシンにVS2015 RTM
  • これをBuildTemplateのProcess部分のMSBuild引数に入れます

/tv:14.0/p:GenerateBuildInfoConfigFile = false /p:VisualStudioVersion=14.0

コンパイルテストとVSユニットテストの両方が正常に実行されています。

17
Jiří Zídek

どちらかを使用してみてください

/p:VisualStudioVersion=14.0

または

/tv:14 

ビルド引数で

5
fenix2222

JiříZídekの答えは正しいですが、重要な詳細が1つ欠けていました。 TFS 2012 Update 2で動作させるには、次のことを行う必要がありました。

  1. ビルドサーバーにVisualStudio2015をインストールします
  2. をセットする MSBuild Argumentsビルド定義で/p:VisualStudioVersion=14.0(つまり、Visual Studio 2015モード)
  3. c#6構文を使用する各プロジェクトで、NuGetパッケージをインストールします Microsoft.Net.Compilersinstall-package Microsoft.Net.Compilers

私にとって違いを生んだのは#3でした。

2
John Reilly

2015年をバイパスしてTFS2012とVS2017を使用している方は、私の回答に従ってください ここにリンクの説明を入力してください

TFS2012およびVS2017継続的インテグレーションビルド

0
gavin