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


106

내 프로젝트에서 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


3
아래에 제공된 링크에서 MS Build Tools 2015를 다운로드하는 사람은 버그가있는 이전 (업데이트 전) 버전을위한 것입니다. 여기 에서 2015 업데이트 3에 대한 링크를 찾았습니다.
bdrajer

답변:


164

다음으로 전화하십시오.

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

2
RyuJIT 이후로 버그가 발생하거나 버그가 많은 것에 대한 우려가 있습니까?
Maslow

3
참고로 PATH 환경 변수를 업데이트하는 경우 "msbuild를 실행할 때 여전히 호출 할 수 있으므로 이전 위치 (예 : C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319)를 제거해야합니다. "from cmd
TheWebGuy

2
또한 nuget 패키지 Microsoft.Net.Compilers를 설치해야했습니다. stackoverflow.com/a/36774876/584714
DrGriff

2
모든 프로젝트에 너겟 패키지를 설치하지 않고도 이에 대한 해결책이 있습니까? 나는 이것을 필요로하는 100 개의 프로젝트를 가지고 있고 그것은 나에게 불필요 해 보인다. 어딘가에 버그처럼 보입니다.
Cole W

2
@ColeW 질문에 대한 답변이있는 사람이 있습니까?
Zinov 2017 년

61

그런데 빌드 서버에 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

IMHO에는 원인이 있으며 질문이 해당 환경과 관련된 이유가 있습니다. 질문에 대한 의견을 더 잘 작성하십시오.
jogo

24
stackoverflow는 질문에 대한 댓글을 허용하지 않기 때문에 시스템에서 허용하는 유일한 방법으로 게시했습니다. 유용하지 않다면 무시하십시오. 내 빌드 서버에서 솔루션을 검색하는 동안 VS2015를 설치하는 대신이 방법을 사용했습니다.
MuhKuh

"Microsoft Build Tools 2015"(또는 "Microsoft Build Tools 2017")를 설치하면 솔루션을 빌드하는 데 사용할 Visual Studio 버전도 제어 할 수 있습니다. MSBuild.exe / t : Build YourSolution.sln / p : VisualStudioVersion = 14.0 [VS2017위한 VS2015 14.0 및 15.0, 10.0 VS2010로 설정]
알렉스 Sanséau

다운로드하고 설치하려면 업데이트 3 마이크로 소프트 빌드 도구 2015을 참조하시기 바랍니다 오래된 VS 다운로드 및 이동 Redistributables and Build Tools섹션.
RBT

12

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

이에 대한 또 다른 가능한 해결책은 프로젝트를 빌드 할 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을 대상으로하는 프로젝트가 있어야한다고 생각하지만 확인하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.