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; 
     }  
    } 
} 

VS2015

에 컴파일 cproj는 toolsversion 14.0

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

이 내가 비주얼 스튜디오 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로 컴파일하기 위해 노력하고있어 어떻게에게 있습니다

이것은 오류 메시지

입니다.
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

14.0 \ 빈 \ Microsoft.Build.Framework.dll \ 당신 C# v5로 다시 작성합니다. – DavidG

+0

@DavidG하지만 어떻게 수정해야합니까? – xvan

+0

아마도'Microsoft.Build. *'라이브러리를 참조 할 것입니까? 그들에게 완전한 길은 무엇입니까? – DavidG

답변

1

Microsoft.Build.* 라이브러리의 이전 버전을 참조하고 있으며 올바른 라이브러리를 가리키고 있는지 확인하십시오. 오래된 것들을 사용한다면 당신은 null propogation 연산자를 이해하지 못하는 C# v5로 빌드하려고 할 것입니다.

예를 들어, 내 빌드 시스템에서 그들은 다음과 같습니다

C : \의 Program Files (x86) \ MSBuild에서이 14.0 \ 빈 \ \ Microsoft.Build.dll

C : \의 Program Files (x86) \ MSBuild를

+0

감사합니다! – xvan