2015-12-18 13 views
10

私がサポートしている古いプロジェクトについては、近代化を行ってきました。これにはさまざまなものが含まれています:.NET Frameworkを最大4.6にバンプする、その他のアップグレード。私たちが持っているものの1ついくつかは、ビジネスロジックを変更しない限り、構文上のアップグレードを行います。TeamCityで文字列の補間が行われない

最近「Visual Studio 2015」と最新かつ最高のReSharperもインストールされました。これにより、「文字列補間」がコード内でできることが明らかになりました。

// Normal, pre-C#6 formatting: 
var foo = string.Format("Some string {0}", bar); 

// C#6 String Interpolation 
var foo = $"Some string {bar}"; 

それは読んでのメッセージは非常に簡単になりますので、これは本当に便利であり、通常は少ない文字を取ることによって:知らない人のために、文字列の補間は以下のようにstring.Formatのコールオーバーシンタックスシュガーです。

...しかし、TeamCityは同意していないようです。私はコミットのコードを上にプッシュされたとき、私は次のエラー得た:これは新しい機能であるため、表面には

Directory\SomeFile.cs: error CS1056: Unexpected character '$' [C:\ProjectDirectory\Project.Core\Project.Core.csproj] 

を、それはある種の事前C#6ビルダーのように思えるが、ヒットされていますC#6へ。

  1. ビルド構成は、おそらく.NET 4.6は、私たちのビルドにインストールされているので、これは、私は一時停止できますC:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exeを指している。ここで

    は私がこれは何が起こっているかであることを理論化する理由であることを観察したものですエージェント。

  2. .NETインストーラから.NET 4.6を直接インストールしようとすると、.NET 4.6が既にbulidエージェントにインストールされているため、失敗します。

  3. 私たちのビルド構成のコンパイルステップは私にも休止を与えています。ビルドエンジンとフレームワークのバージョンをそれぞれメモする最初の2行は[exec] Microsoft (R) Build Engine version 4.6.1055.0 [exec] [Microsoft .NET Framework, version 4.0.30319.42000]です。ビルドエンジンは明らかにv4.6ですが、.NETフレームワークは4.0です。私はそれを読んでいますか?

  4. 最後に、ビルドログの最終行の1つ:[NAnt output] External Program Failed: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe (return code was 1)ではない 4.6 ...それは?

質問: Twofold。この最初の質問はばかげているかもしれませんが、は.NET 4.6に対して実際にコンパイルしていますか?第2に、もし私が.NET 4.6を指しているなら、どのようにしてC#6のString Interpolation構文を実際にビルドすることができますか?

何かについてはこのすべてについて、私には分かりませんA)いくつかのものがありませんか、B)私はそれらについて正確に何をすべきですか?

答えて

26

私は納得しています。面白いパス/バージョンは本当に本当の問題を示していました。MSBuild.exeが実行されていたのは、VS2015によってインストールされたものではありませんでした。

from hereと書いてありましたが、は、実際にはC#6より前のバージョンです。MSBuild.exeは、C:\Windows\Microsoft.NET\Framework\v4.0.30319です。なんらかの理由でVisual Studio 2015をインストールするとはインストールされません。そのインストールを変更してください!

MSBuild.exeのコールでC:\Program Files (x86)\MSBuild\14.0\Binに保存されているコピーをVS2015によってインストールされた最新のC#バージョンに対してコンパイルするように指示する必要があります。

+4

完全性のために、各ビルドエージェントに実際にVS2015をインストールする必要はありません。あなたがいくつか持っているならかなり面倒なことになるかもしれません。 [Microsoft Build Tools 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48159)をインストールするだけで、TeamCityはエージェントの要件を満たすようにこれを選択する必要があります。次に、MSBuildステップでBuild Tool 2015を選択することができます(使用している場合)。 – SteveChapman

+0

私たちは実際に使用したいビルダーへのパスを持つNAntスクリプトを使用します...しかし、それは良い提案です!ありがとう。 –

関連する問題