Microsoft.Net.Compilers의 목적은 무엇입니까?


83

이 컴파일러의 중요성은 무엇입니까? 필수품입니까, 아니면 할 수 있습니까? 어쨌든 다른 컴파일러를 갖는 목적은 무엇입니까? 아니면 미래형 프로젝트입니까? 간략한 개요를 주시면 감사하겠습니다.


2
또한 Microsoft.CodeDom.Providers.DotNetCompilerPlatformv1.0.8 이하 의 종속성 이므로 그 이유 때문에 볼 수 있습니다
KyleMit dec.

1
마이크로 소프트에 따르면 , Microsoft.Net.Compilers찬성되지 않습니다 Microsoft.Net.Compilers.Toolset.
Uwe Keim 20.01.08

답변:


96

Microsoft.Net.Compilers 패키지의 요점은 .NET Framework 또는 Visual Studio와 함께 제공되는 컴파일러가 아니라 해당 패키지와 함께 배포 된 컴파일러가 프로젝트를 컴파일하는 데 사용된다는 것입니다. 가장 실용적인 직접적인 이점은 프로젝트에서 C # 6 기능을 사용할 수 있도록 허용 한 다음 해당 프로젝트를 C # 6 컴파일러가 설치되지 않은 시스템 (예 : 지속적인 통합 서버)에서 빌드 할 수 있다는 것입니다. 전체 Visual Studio 2015를 설치하고 싶습니다.


.cs 파일을 컴파일하고 il을 내보내는 매우 간단한 작업을 수행해야합니다. 외부 참조를 확인할 필요가 없습니다. Microsoft.Net.Compilers로 가능합니까?
Bandara 2017 년

@Bandara Microsoft.Net.Compilers를 사용하거나 사용하지 않고 외부 참조없이 C #을 컴파일 할 수 없습니다. 예를 들어, 참조 된 어셈블리는 과부하 해결을 위해 필요합니다. 그리고 외부 참조가있는 경우 Microsoft.Net.Compilers에서 기술적으로 가능하지만 실제로는 작업에 잘못된 도구입니다. 자신의 프로그램에서 직접 호출 할 수있는 방식으로 다른 패키지에서 동일한 컴파일러를 이미 사용할 수있는 경우 외부 프로세스를 시작합니다.

@JaredPar (MS)의 업데이트 된 답변을 참조하십시오.이 답변은 더 이상 유효하지 않습니다. 최신 VS / VSCode / SDK 도구 세트로 빌드하기 위해 솔루션을 확인하고 이전 패키지를 제거해야한다고 생각합니다.
Tony Wall

17

현재 Microsoft.Net.Compilers에는 목적이 없습니다. 더 이상 사용되지 않는 NuGet 패키지이며 Visual Studio 16.5 이후에 생성되지 않습니다. Microsoft.Net.Compilers.Toolset이라는 후속 패키지가 있습니다. 이 패키지는 Microsoft.Net.Compilers와 기능이 거의 동일하지만 .NET Desktop 및 .NET Core MSBuild 인스턴스 모두에서 작동합니다.

그렇더라도 Microsoft.Net.Compilers.Toolset은 일반적인 사용을위한 것이 아닙니다. 이 패키지는 두 가지 용도로 사용됩니다.

  1. 컴파일러에서 충돌 버그를 발견 한 고객을 차단 해제하기위한 단기 수단 역할을합니다. 이러한 고객의 경우이 패키지를 사용하여 수정 사항을 Roslyn 저장소에 병합 한 후 한 시간 정도만 해당 시나리오의 차단을 해제 할 수 있습니다. 이는 수정이 관련 Visual Studio 또는 .NET SDK 서비스 릴리스에 포함될 때까지 브리지 역할을합니다. 이 경우 고객은 솔루션에서 패키지를 제거하고 공식적으로 출시 된 도구 세트를 사용하도록 요청받습니다.
  2. Roslyn과 .NET SDk의 공식 빌드간에 바이너리를 이동하는 메커니즘 역할을합니다.

이 패키지는 고객이 빌드를 위해 일반적으로 장기간 사용하는 것은 아닙니다 . 일부 고객이이를 선택했지만 이러한 사용도 지원되지 않음을 이해합니다. 이 패키지는 새 버전의 MSBuild 또는 .NET SDK의 작업 / 대상에 대한 종속성을 취하여 정기적으로 중단을 일으킬 수 있습니다.

빌드에 새 버전의 컴파일러를 사용하려는 고객은 대신 컴파일러의 공식 배포판 중 하나를 사용하는 것이 좋습니다.

  1. Visual Studio 빌드 도구 SKU를 사용합니다.
  2. .NET SDK 사용

참고 : Microsoft.Net.Compilers 패키지는 종속성이기 때문에 몇 년 전에 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 패키지의 일부로 공식적으로 지원되었습니다. 버전 2.0부터는 Microsoft.Net.Compilers에 대한 종속성이 제거되었으며 이제 완전히 독립적 인 패키지로 유지됩니다. 동시에 더 이상 명시적인 사용 사례가 없으므로 Microsoft.Net.Compilers를 더 이상 사용하지 않도록 이동했습니다.

즉, 일부 고객은 Microsoft.CodeDom.Providers.DotNetCompilerPlatform이 종속성을 삭제할 때 제거되지 않았기 때문에 프로젝트 파일에서 Microsoft.Net.Compilers가 예기치 않게 발견된다는 것을 의미합니다. 이러한 고객을위한 조언은 단순히 패키지에 대한 참조를 삭제하는 것입니다. 더 이상 필요하지 않습니다.


매우 흥미로운 통찰력. 궁금 왜에만 NuGet 패키지의 설명에 언급되지 않은 단기 사용에 대한 측면 : nuget.org/packages/Microsoft.Net.Compilers
잭 밀러

@JackMiller Microsoft.Net.Compilers.Toolset 에서 언급되었습니다 . `이 패키지는 주로 고객에게 핫픽스를 신속하게 배송하기위한 방법입니다. 이전 MSBuild 설치에서 최신 컴파일러를 제공하기위한 장기 솔루션으로 사용하는 것은 명시 적으로 지원되지 않습니다. 그와 정기적 basis.`에 휴식 것입니다 수
Youssef13

6

풍부한 코드 분석 API와 함께 오픈 소스 C # 및 Visual Basic 컴파일러를 제공하는 패키지입니다.

github에서 광범위한 문서를 찾을 수 있습니다.

https://github.com/dotnet/roslyn


5
감사. 나는 이전에 공식 문서에 가본 적이 있지만 여전히 프로젝트의 목적이 모호합니다.
usefulBee

2
@usefulBee는 기본적으로 추가적인 정보를 원하시면, 예를 들어 오픈 Microsoft에서 소스 운동, 체크 위키 피 디아의 결과입니다 en.wikipedia.org/wiki/.NET_Compiler_Platform
ViRuSTriNiTy

1

다른 사람들이 말했듯이 C # 및 VB.NET 용 .NET 컴파일러가 포함되어 있습니다.

이 패키지의 흥미로운 점은 아직 Visual Studio와 함께 제공되지 않은 버전을 포함하여 프로젝트에 대한 컴파일러의 특정 빌드를 지정할 수 있다는 것입니다.

Visual Studio의 오픈 소스 구성 요소 인 https://github.com/dotnet/project-system 에서 사용합니다 . 이를 통해 VS와 함께 제공되는 컴파일러에서 지원하지 않는 언어 기능을 dogfood하기 위해 컴파일러의 시험판 버전을 사용할 수 있습니다.

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