[c#] msbuild를 C # 6으로 업그레이드하는 방법은 무엇입니까?

내 프로젝트에서 C # 6을 사용하고 싶습니다 (null 전파, 기타 기능).

내 PC에 VS 2015를 설치했으며 훌륭하게 작동하고 다음과 같은 테스트 코드를 빌드합니다.

var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];

하지만 프로젝트를 저장소에 푸시하고 CI가 빌드를 시작하면 지원되지 않는 ?.

CI 서버에도 VS2015를 설치했지만 사용하지 않는 것 같습니다. 어떡해?

CI-CruiseControl .NET 빌드 C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe



답변

다음으로 전화하십시오.

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

이것이 Visual Studio 2015와 함께 제공되는 MsBuild 버전이며이를 이해하는 C # 컴파일러를 호출합니다. Visual Studio 2015 버전을 설치하거나 독립 실행 형 Microsoft Build Tools 2015 를 설치하여 시스템에이 버전의 MsBuild를 가져올 수 있습니다 .

다음 NuGet 패키지에 대한 참조를 추가 하면 새 컴파일러도 강제로 사용됩니다.

Install-Package Microsoft.Net.Compilers

Install-Package는 찾고있는 버전이 아닐 수있는 사용 가능한 최신 버전을 선택합니다. 설치하기 전에 릴리스 정보 및 종속성을 확인하여 처리중인 버전의 근본적인 문제를 해결하십시오.이 경우에는 VS 2015에 더 구체적입니다.

따라서 Visual Studio 2015의 경우 :

Install-Package Microsoft.Net.Compilers -Version 1.0.0


답변

그런데 빌드 서버에 VS2015 대신 “Microsoft Build Tools 2015″를 설치할 수도 있습니다.

https://www.microsoft.com/en-us/download/details.aspx?id=48159

동일한 경로에 MSBuild를 설치합니다.

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe


답변

이미이 기능이 작동하고있을 수 있지만 향후 다른 사람에게 도움이 될 수 있습니다. 최근에이 질문을 접했고 올바른 방향으로 나아가고 궁극적으로 해결책을 찾았습니다.

이에 대한 또 다른 가능한 해결책은 프로젝트를 빌드 할 MSBuild 버전을 대상으로 프로젝트 파일을 수동으로 업데이트하는 것입니다.

최근에 TeamCity 빌드 서버 업데이트를 진행했으며 이미 여기에 Microsoft Build Tools 2015를 설치했습니다. 저는 빌드 서버에 모든 것을 갖추고 있다고 생각했고, C # 6.0을 대상으로하는 솔루션이 있었고 .net 4.6.1을 대상으로하는 모든 프로젝트가있었습니다. 여러분처럼 C # 6.0 전용 코드를 사용하는 모든 것이 제 로컬 환경에서 잘 빌드되었지만 제 TeamCity 빌드 서버는 그 어떤 것도 좋아하지 않았습니다.

다른 사람들이 언급했듯이 Microsoft.Net.Compilers NuGet 패키지를 사용해 보았습니다. 최신 버전은 빌드가 내 빌드 서버에서 작동하도록 허용했지만 로컬로 코드를 게시 할 수는 없었습니다 (내 요구 사항). 해당 NuGet 패키지의 이전 버전에서는 게시 할 수 있었지만 빌드가 작동하지 않았습니다.

내가해야 할 일은 궁극적으로 C # 6.0 코드를 처리 할 수있는 MSBuild 버전을 대상으로하는 솔루션의 각 프로젝트 파일을 수정하는 것입니다. 각 프로젝트 파일에서 다음 줄과 비슷한 줄을 찾았습니다.

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

해당 줄의 핵심 구성 요소는 ToolsVersion 부분입니다. 프로젝트 파일에서이 줄을 다음과 같이 변경했습니다.

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

여기서 차이점은 4가 아닌 버전 14를 대상으로한다는 것입니다. 버전 14.0은 Build Tools 2015에 해당합니다.이를 변경함으로써 TeamCity 빌드 서버가 올바른 MSBuild 버전을 사용하고 C # 6.0 코드를 빌드 할 수있었습니다.

또한 VS2015가 올바른 작업을 수행하지 않고 내 로컬 빌드를 엉망으로 만들었 기 때문에 4.6.1을 사용하도록 TargetFrameworkVersion xml 노드를 수동으로 업데이트해야했지만 여기서는 관련이 없습니다.

누군가 내가 틀렸다면 나를 고쳐주세요.하지만 참고로 버전 번호는 다음과 같습니다.

4.0 = VS2012

12.0 = VS2013

14.0 = VS2015

15.0 = VS2017

.net 4.7을 사용하려면 Build Tools 2017을 설치하고 14.0이 아닌 15.0을 대상으로하는 프로젝트가 있어야한다고 생각하지만 확인하지 않았습니다.


답변