web-dev-qa-db-ja.com

TFSは文字列補間構文をコンパイルしません

先週リリースされたときにVisualStudio2015に更新しました。 Resharperは、string.Formatを使用して次の文字列を更新することを提案しました。

string filePath = HttpContext.Server.MapPath(string.Format("~/App_Data/{0}.xlsx", Guid.NewGuid()));

文字列補間を使用するには:

string filePath = HttpContext.Server.MapPath($"~/App_Data/{Guid.NewGuid()}.xlsx");

私はこれをしました、そしてすべては順調です。

しかし、私はTFSのビルドを壊しました:

Controllers\MyController.cs(224):予期しない文字 '$'

そのため、C#6の新機能は、更新されていない古いバージョンのTFSではコンパイルできないようです。

プロジェクトはまだフレームワーク4.5の使用を対象としていますが、私は4.6を対象としていません。私は(間違って)古いフレームワークをターゲットにしているということは、TFSビルドサーバーと一緒にVS2013を使用している他のチームメンバーによってビルドできることを意味すると思いました。

したがって、TFSには...何かの更新が必要なようです。

この新しい構文をコンパイルするには、TFSサーバーに何をインストールする必要がありますか? .NET Frameworkの最新バージョンか何か他のもの?

16
bgs264

。NET Framework 4.6 および Build Tools 2015 をビルドサーバーにインストールします。次に ToolsVersionをオーバーライドします/tv:14.0)MSBuild引数内。

15
KMoraz

残念ながら、TFSビルドサーバーにVS2015をインストールせずに、古いバージョンのTFSをC#6.0で動作させる簡単な方法はないようです。あなたがそれをすることができるならば、私はそれを提案するでしょう。何らかの理由でできない場合は、次のことがうまくいきました。

私は他の答えの指示に従いましたが、それだけではうまくいきませんでした。また、デフォルトのTFSビルドプロセステンプレート(私の場合は$ // BuildProcessTemplatesにあります)を編集し、[Run MSBuild forProject]ノードのToolPathプロパティをMSBuild14.0の場所(通常はC :)に変更する必要がありました。\Program Files(x86)\ MSBuild\14.0\Bin)。

次に、新しいビルドテンプレートを使用するようにビルド定義を更新する必要があります(新しいテンプレートをコピー/編集した場合と元のテンプレートを編集した場合)。

この時点で、TFSを使用してC#6プロジェクトをビルドできるはずですが、Web展開/パッケージ化も実行しようとしている場合は、さらにいくつかの手順があります。

ビルドサーバーのC:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0には、TypeScriptフォルダーだけがあります。 VS2015を使用するローカルマシンで、同じパスに移動します。 WebおよびWebApplicationsフォルダーが必要です。それらをサーバーのフォルダーにコピーします。これで、Webプロジェクトもパッケージ化/デプロイできるようになります。

6
user3191350

「RunMSBuildfor Project」が、TFSビルドプロセステンプレート内に複数回存在するかどうかを確認してください。私の場合、それは2回存在し、ToolPathの変更が目的の効果をもたらさなかった理由を理解するのにしばらく時間がかかりました。

0
Patrick Neborg