1

これは動作するC#6テストコードです。それは Microsoft.Build(Visual Studio SDK)でC#6をコンパイルする際のエラー

namespace testcode 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string x = null ; 
      string y = x?.Substring(0, 2); 
      return; 
     }  
    } 
} 

cprojがtoolsversion 14.0

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

を持っている。これは、私がのVisual Studio SDK

//References Microsoft.Build and Microsoft.Build.Framework 
namespace MSBuildTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var pc = new Microsoft.Build.Evaluation.ProjectCollection(Microsoft.Build.Evaluation.ToolsetDefinitionLocations.Registry); 
      pc.DefaultToolsVersion = "14.0"; 
      pc.RegisterLogger(new Microsoft.Build.Logging.ConsoleLogger(Microsoft.Build.Framework.LoggerVerbosity.Detailed)); 
      var pr = pc.LoadProject(@"C:\path\to\testcode.cproj"); 
      pr.Build(); 
     } 
    } 
} 
経由 MSBUILDでそれをコンパイルしようとしている方法ですVS2015

にコンパイル

これはエラーメッセージ

です。
Program.cs(8,26): error CS1525: Invalid expression term '.' 
Program.cs(8,27): error CS1003: Syntax error, ':' expected 
    0 Warning(s) 
    2 Error(s) 

私はそれが間違っているのMSBuild実行可能ファイルを使用してだと思うが、私はMSBUILDビン・パスを強制する方法を発見しました。

+0

ます私はC#v5で再構築すると思います。 – DavidG

+0

@DavidGしかし、どうすれば修正できますか? – xvan

+0

おそらく、適切な 'Microsoft.Build。*'ライブラリを参照していますか?それらの完全な経路は何ですか? – DavidG

答えて

1

Microsoft.Build.*ライブラリの古いバージョンを参照していますが、正しいものを指していることを確認してください。古いものを使用している場合は、null伝搬演算子を理解していないC#v5でビルドしようとします。

は例えば、私のビルドマシン上で彼らは、次のとおりです。

C:\プログラムファイル(x86の)\ MSBuildの\ 14.0 \ビン\ Microsoft.Build.dll

C:\プログラムファイル(x86の)\ MSBuildの\ 14.0 \ビン\ Microsoft.Build.Framework.dll

+0

恐ろしい男、ありがとう! – xvan

関連する問題