예를 들어 null 전파 및 속성 초기화, 대상 버전 .NET 4.0 설정과 같은 C # 6.0 goodies와 함께 샘플 프로젝트를 만들었습니다. 작동합니다.
public class Cat
{
public int TailLength { get; set; } = 4;
public Cat Friend { get; set; }
public string Mew() { return "Mew!"; }
}
class Program
{
static void Main(string[] args)
{
var cat = new Cat {Friend = new Cat()};
Console.WriteLine(cat?.Friend.Mew());
Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
}
}
- Wikipedia에 따르면 C # 6.0의 .NET 프레임 워크는 4.6입니다.
- 이 질문 (및 Visual Studio 2015 CTP 테스트)에 따르면 CLR 버전은 4.0.30319.0입니다.
- 이 MSDN 페이지 는 .NET 4, 4.5, 4.5.2가 CLR 4를 사용한다고 말합니다. .NET 4.6에 대한 정보가 없습니다.
.NET 4.0을 대상으로하는 소프트웨어에 C # 6.0 기능을 사용할 수 있습니까? 제한이나 단점이 있습니까?
답변
예 (주로). C # 6.0에는 새로운 Roslyn 컴파일러가 필요하지만 새로운 컴파일러는 이전 프레임 워크 버전을 대상으로 컴파일 할 수 있습니다. 이는 프레임 워크의 지원 이 필요없는 새로운 기능에만 국한됩니다 .
예를 들어 C # 6.0의 문자열 보간 기능을 이전 버전의 .Net과 함께 사용할 수 있지만 (에 대한 호출이 발생 함 string.Format
) :
int i = 3;
string s = $"{i}";
IFormattable
새로운 프레임 워크 버전 만 추가하면 .Net 4.6이 필요 합니다 System.FormattableString
.
int i = 3;
IFormattable s = $"{i}";
언급 한 사례는 프레임 워크의 유형이 필요하지 않습니다. 따라서 컴파일러는 이전 프레임 워크 버전에서 이러한 기능을 완벽하게 지원할 수 있습니다.
답변
Wikipedia 및 기타 링크를 이해하는 방법에 초점을 맞추고 싶습니다.
Wikipedia에서 C # 6.0이 .NET Framework 4.6과 함께 있다고 말하면 컴파일러 (msc.exe)의 프로덕션 버전이 .NET Framework 4.6 릴리스의 일부가됨을 의미합니다. 이러한 컴파일러는 다중 타겟팅을 통해 더 낮은 버전의 .NET Framework 릴리스를 지원할 수 있습니다. 물론 Roslyn은 오픈 소스 프로젝트가되었으므로 이제 컴파일러는 완전히 개별 구성 요소입니다.
CLR 버전 4.0.30319 (.0)를 참조 할 때 실제로는 .NET Framework 4. * (4.0, 4.0. *, 4.5, 4.5. *, 4.6, 4.6. *) 일 수 있습니다. CLR 버전 4 사양 물론 Xamarin / Mono도 동일한 CLR 사양을 구현합니다.
MSDN 페이지는 아직 완전히 업데이트되지 않았지만 일부 페이지 에는 버전 정보 섹션에 .NET Framework 4.6이 이미 있습니다.
언어 사양 (C # 컴파일러뿐만 아니라), CLR 사양 및 .NET Framework 릴리스는 서로 밀접하게 연결되어 있지 않습니다. 새로운 컴파일러를 사용하여 구형 CLR 및 .NET Framework를 대상으로하는 데 충분한 유연성을 제공합니다.
답변
예. 이전 프레임 워크에 최신 컴파일러를 사용하고 새로운 컴파일러 기능에 액세스 할 수 있습니다 (이 기능에 .NET 4.6에 도입 된 새로운 유형이 필요하지 않은 경우).
이것의 다른 예는 C # 4.0 (.NET 4.0)에 기본 매개 변수가 도입 된 방법이지만 .NET 2.0 (C # 2.0) 및 .NET 3.5 (C # 3.0) 프로젝트에서 사용할 수 있습니다.
컴파일러를 행복하게 만들기위한 작은 해결 방법 을 하나만 사용하여 .NET 3.5에 도입 된 특성을 찾을 수있는 경우 .NET 2.0 또는 .NET 3.0에서 확장 메서드 (C # 3.0에 도입 됨)를 사용할 수도 있습니다.
답변
빌드 스크립트를 사용하는 경우 새 빌더의 경로를 변경해야합니다.
CPATH = C : \ Program Files (x86) \ MSBuild \ 14.0 \ Bin 설정
[Rebuild.bat]
set CPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
call nuget_restore.bat
"%CPATH%\msbuild" YourSolution.sln /t:Rebuild /p:Configuration=Release /fileLogger /flp:logfile=JustErrors.log;errorsonly /verbosity:minimal
if %errorlevel% neq 0 goto ERROR
REM call deploy Release //Things like deploy files..
goto END
:ERROR
echo ERROR: %errorlevel%
pause
:END
답변
의해 답변을 @oobe 실제로 importatnt. C : \ Program Files (x86) \ MSBuild \ 14.0 \ Bin 에서 MSBuild.exe 를 사용한 후에 만 배치 파일을 통해 솔루션을 빌드 할 수 있습니다.