2017-03-21 12 views
14

私は、フレームワークが対象とするプロジェクトを.NET Framework 4.6.1とし、tfsの継続的な統合プロセスの一環として、コードは正しくコンパイルされます。
TFSサーバーの最新バージョンは.Net Famework 4.6.2です。

Error CS1056: Unexpected character '$' 

私は、文字列の補間を交換したくない:これはフレームワーク

On all other OS versions: 394806 => .NET Framework 4.6.2

のリリースキーの値である。しかし、ビルドが、それは、このエラーが付属して実行したときに登録オンstring.Formatこの問題を解決するには、解決するための別の回避策を提供してください。

TFSサーバーに別のものをインストールする必要はありますか?

+0

サーバーで実行されているMSBuildのバージョンは何ですか? –

+0

.NET FrameworkではなくMSBuildツールを更新する必要があります – VMAtm

+0

@VMAtmどうすればいいですか?私はちょうどhttps://www.microsoft.com/en-us/download/details.aspx?id=48159をダウンロードし、それは失敗しているものです – Heinrich

答えて

11

問題がNugetパッケージ Microsoft.Net.Compilersをインストール固定することができます。これは、あなたが他のプロジェクトとは異なるToolsetVersionと溶液中のプロジェクトをビルドすることができます。以下は私の強調表示の答えのリンクです:私は3種類の方法でこの問題を解決し、私の経験ではProject builds fine with Visual Studio but fails from the command line

That feature is a syntactic sugar for C#6, try to install the latest version of the framework 4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345

Then go to your Project properties and change on the Application option on Target framework to point to the latest. You don't need to change your code to replace the string interpolation with string.Format method to fix it. If you are still getting this error, is because, the compiler that is running your build is not the latest version of C#, try to add the Microsoft.Net.Compilers, from Nuget and compile again, that should resolve the issue. If you want to avoid to install this package, try to open your .csproj and take a look on the ToolsVersion.that should be pointing to the version 12, then change it to 14, but make sure you have installed the latest version of the MSBuild from https://www.microsoft.com/en-us/download/details.aspx?id=48159 or go to C:\Program Files (x86)\MSBuild\14.0\Bin, there you should have this folder with the csc.exe compiler. If even then that doesn't resolve the issue, then try to follow this steps https://msdn.microsoft.com/en-us/library/bb383985.aspx .

1-ちょうどマイクロソフトのビルドをインストールNuget

2-パッケージを取得しますtfsサーバー上のツール2015

3 - スレッジハンマーと最後のオプションですが、ナゲットの依存関係に対処する必要がないため、私は最高です.tugサーバーにVisual Studioバージョンをインストールしていますnプロセス。

希望します。

+0

このナゲットパッケージの依存関係をインストールすると、私の問題は解決しました。 100個のプロジェクトがある場合、依存関係をインストールするのを避ける方法はありますか? – Heinrich

+0

ここで私の答えを見てくださいhttp://stackoverflow.com/a/43072823/819153 – Zinov

0

文字列補間のコードがあり、proper build toolsがないと思っています。

+0

実際に私はそのツールの上位バージョンをサーバーにインストールしました – Heinrich

+0

エラーが発生しているコードを確認するのに役立ちました。 –

9

MS Build tools 2015%ProgramFiles%\MSBuild\14.0\binにインストールした後、新しい値(14.0)のoverride the MSBuild version for build serverが必要です。 ;

あなたはMSDNの記事を読んでください(またはthis answer)が、TL DRあなたのオプションは以下のとおりです。あなたがビルド時(短いため、または/tv/ToolsVersionスイッチを使用して

  • オーバーライドバージョンコマンドラインからプロジェクトまたはソリューション:にToolsVersionパラメータを設定することにより、

    msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug 
    
  • オーバーライドバージョンタスク:ソリューション内のプロジェクトに$(Project.ToolsVersion)プロパティを設定して

    <MSBuild Projects="myProject.proj" 
        ToolsVersion="14.0" 
        Targets="go" /> 
    
  • オーバーライドバージョン。

    <Project ToolsVersion="14.0" ... </Project> 
    

The order of precedence, from highest to lowest, used to determine the ToolsVersion is:

  1. The ToolsVersion attribute on the MSBuild task used to build the project, if any.
  2. The /toolsversion (or /tv) switch that's used in the msbuild.exe command, if any.
  3. If the environment variable MSBUILDTREATALLTOOLSVERSIONSASCURRENT is set, then use the current ToolsVersion .
  4. If the environment variable MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT is set and the ToolsVersion defined in the project file is greater than the current ToolsVersion , use the current ToolsVersion .
  5. If the environment variable MSBUILDLEGACYDEFAULTTOOLSVERSION is set, or if ToolsVersion is not set, then the following steps are used:
    • The ToolsVersion attribute of the Project element of the project file. If this attribute doesn’t exist, it is assumed to be the current version.
    • The default tools version in the MSBuild.exe.config file.
    • The default tools version in the registry. For more information, see Standard and Custom Toolset Configurations .
  6. If the environment variable MSBUILDLEGACYDEFAULTTOOLSVERSION is not set, then the following steps are used:
    • If the environment variable MSBUILDDEFAULTTOOLSVERSION is set to a ToolsVersion that exists, use it.
    • If DefaultOverrideToolsVersion is set in MSBuild.exe.config , use it.
    • If DefaultOverrideToolsVersion is set in the registry, use it.
    • Otherwise, use the current ToolsVersion .
+0

この変更をすべて試しましたが、レジスタの値をデフォルトのバージョンを14.0に変更しても、MSBuild.exe.configが変更されましたが、すべてが失敗しました。私のプロジェクトには適切なToolsVersion – Heinrich

+1

@Heinrichがあります。また、C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ "からmsbuild.exeを実行していることを確認する必要がありますC:¥Windows¥Microsoft.NET¥Framework¥v4.0.30319¥) – Shrike

+1

私の場合、%ProgramFiles(x86)%\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ msbuild.exeです。 "' – knocte

2

間違ったMSbuild.exeでビルドしている可能性があります。 Visual Studioでコンパイルして(動作する場所)、出力のログを確認します。

1>Target "GetReferenceAssemblyPaths" in file "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets" 

私の場合、そのBinディレクトリにMSBuild.exeを使用していることを確認してください。

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe 
関連する問題