web-dev-qa-db-ja.com

エラーCS1056:tfs継続的統合プロセスでmsbuildを実行している予期しない文字 '$'

コードが正しくコンパイルされるようにするために、ソリューションのビルドタスクを作成したtfsの継続的統合プロセスの一部として、フレームワークが.NET Framework 4.6.1をターゲットにしているプロジェクトがあります。
TFSサーバーには.Net Famework 4.6.2の最新バージョンがあります。レジスタでは、これはフレームワークのリリースキーの値です。

他のすべてのOSバージョン:394806 => .NET Framework 4.6.2

ただし、ビルドを実行すると、次のエラーが発生します。

Error CS1056: Unexpected character '$'

この問題を解決するために、文字列補間をstring.Formatに置き換えたくありません。別の回避策を提供して解決してください。

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

27
Heinrich

この問題は、NugetパッケージMicrosoft.Net.Compilersをインストールすることで修正できます。ハイライトされた答えのリンクを次に示します。 プロジェクトはVisual Studioで正常にビルドされますが、コマンドラインからは失敗します

その機能はC#6の構文糖衣です。フレームワーク4.6.2の最新バージョンをインストールしてみてください https://www.Microsoft.com/en-us/download/details.aspx?id=53345

次に、プロジェクトのプロパティに移動し、ターゲットフレームワークの[アプリケーション]オプションを変更して、最新のものを指すようにします。文字列の補間をstring.Formatメソッドに置き換えて修正するためにコードを変更する必要はありません。それでもこのエラーが発生する場合は、ビルドを実行しているコンパイラーがC#の最新バージョンではないため、NugetからMicrosoft.Net.Compilersを追加して再コンパイルし、問題を解決する必要があります。このパッケージのインストールを避けたい場合は、.csprojを開いて、バージョン12を指しているはずのToolsVersion。を見てみて、14に変更してください。ただし、最新バージョンがインストールされていることを確認してください。 https://www.Microsoft.com/en-us/download/details.aspx?id=48159 からMSBuild、またはC:\ Program Files(x86)\ MSBuild\14.0\Binに移動し、そこにcsc.exeコンパイラを含むこのフォルダーが必要です。それでも問題が解決しない場合は、この手順に従ってください https://msdn.Microsoft.com/en-us/library/bb383985.aspx

私の経験では、この問題を3つの異なる方法で解決しました。

1- Nugetからパッケージを取得するだけ

2- tfsサーバーにMicrosoft Build Tools 2015をインストールする

3-ハンマーと最後のオプションですが、私にとっては、nugetへの依存を処理する必要がないので、プロセスを実行するtfsサーバーにVisual Studioバージョンをインストールするのが最善です。

お役に立てれば

23
Zinov

MS Build tools 2015%ProgramFiles%\MSBuild\14.0\binにインストールした後、 ビルドサーバーのMSBuildバージョンを上書きする必要があります 新しい値(14.0)。

MSDNの記事(または この回答 )を読む必要がありますが、TL; DRオプションは次のとおりです。

  • コマンドラインからプロジェクトまたはソリューションをビルドするときに、/ToolsVersionスイッチ(または略して/tv)を使用してバージョンをオーバーライドします。

    msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug
    
  • ToolsVersionタスクでMSBuildパラメーターを設定して、バージョンをオーバーライドします。

    <MSBuild Projects="myProject.proj"  
        ToolsVersion="14.0"  
        Targets="go" />
    
  • ソリューション内のプロジェクトで $(Project.ToolsVersion) プロパティを設定して、バージョンをオーバーライドします。これにより、他のプロジェクトとは異なるToolsetVersionを持つソリューションでプロジェクトをビルドできます。

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

ToolsVersionの決定に使用される優先順位は、最高から最低の順です。

  1. プロジェクトのビルドに使用されたToolsVersionタスクのMSBuild属性(ある場合)。
  2. /toolsversionコマンドで使用される/tv(またはmsbuild.exe)スイッチ(ある場合)。
  3. 環境変数MSBUILDTREATALLTOOLSVERSIONSASCURRENTが設定されている場合、現在のToolsVersionを使用します。
  4. 環境変数MSBUILDTREATHIGHERTOOLSVERSIONASCURRENTが設定されていて、プロジェクトファイルで定義されているToolsVersionが現在のToolsVersionよりも大きい場合、現在のToolsVersionを使用します。
  5. 環境変数MSBUILDLEGACYDEFAULTTOOLSVERSIONが設定されている場合、またはToolsVersionが設定されていない場合、次の手順が使用されます。
    • プロジェクトファイルの ToolsVersion 要素のProject属性。この属性が存在しない場合、現在のバージョンと見なされます。
    • MSBuild.exe.configファイル内のデフォルトのツールバージョン。
    • レジストリ内のデフォルトのツールバージョン。詳細については、「 標準およびカスタムツールセット構成 」を参照してください。
  6. 環境変数MSBUILDLEGACYDEFAULTTOOLSVERSIONが設定されていない場合、次の手順が使用されます。
    • 環境変数MSBUILDDEFAULTTOOLSVERSIONが存在するToolsVersionに設定されている場合は、それを使用します。
    • DefaultOverrideToolsVersionMSBuild.exe.configに設定されている場合は、それを使用します。
    • DefaultOverrideToolsVersionがレジストリに設定されている場合は、それを使用します。
    • それ以外の場合は、現在のToolsVersionを使用します。
12
VMAtm

間違った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
7
CharlesS

Microsoft.Net.Compilersは機能しませんでしたが、Nugetから DotNetCompilerPlatform をインストールしました。

2
Mike Flynn

Msbuildバージョン15を使用する必要があります。

1
motodiver

文字列補間を使用したコードがあり、 適切なビルドツール がないと推測しています。

1
Paulo Morgado

私の解決策は2つの部分でした:

1)Visual Studio 2015を使用して、Webプロジェクトを選択し、Projectメニューをクリックして、「Enable C#6」を選択します

2)構成の終了タグの直前に、実動web.configの最後に以下を追加する必要がありました。バージョン番号は将来変更される可能性がありますが、重要なのは、手順1で有効にした後、開発web.configで同様のテキストを探し、本番環境に確実に転送することです。

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
1
Tyler Forsythe