9

이 질문에는 이미 답변이 있습니다.

이전 버전의 .NET Framework (.NET 4.5.2)를 대상으로하는 프로젝트가 있습니다. 나는 비주얼 스튜디오 2015를 설치했다. (그리고 내 컴퓨터에 .NET 4.6을 설치했다.) .NET 4.6 / C #6에서 릴리스 된 C #언어 기능을 사용하면 여전히 컴파일됩니다. 내 프로젝트의 타겟 프레임 워크가 < .NET 4.6이 컴파일되지 않아야합니다 :

    public string MyExpressionBodyProperty => "1";

    //auto properties are new in C#6
    public string MyAutoProperty { get; } = "1";

    private static void MethodThatUsesNameOf(string filename)
    {
        if (filename == null) 
        {
            //nameof was released in C#6
            throw new ArgumentException("The file does not exist.", nameof(filename));
        }
    }

내가 타겟팅하는 프레임 워크 버전에서 작동하는 .NET 언어 기능 만 사용하고 있는지 확인하려면 어떻게합니까?

2 답변


20

.NET Framework 버전과 C #언어 버전은 서로 다릅니다. C #6 언어 기능

public string MyAutoProperty { get; } = "1";
nameof(filename)

VS 2015에 의해 이전 프레임 워크를 대상으로하는 코드로 컴파일 될 수 있습니다.

내가 타겟팅하는 프레임 워크 버전에서 작동하는 .NET 언어 기능 만 사용하고 있는지 확인하려면 어떻게합니까?

.NET Framework 기능을 사용하려고하면 이전 프레임 워크를 대상으로하는 경우 적절한 컴파일러 오류가 발생합니다.

.NET 4.6이없는 머신에이 코드를 배포 할 수 있습니까?

예, 그렇습니다. 배포 컴퓨터가 VS2015에서 대상으로하는 프레임 워크와 호환되는 프레임 워크를 가지고있는 한.


  • 또 다른 옵션은 프로젝트 속성 - 빌드 - 고급에서 C #버전 5로 변경하는 것입니다. - Wayne Bloss

12

C #6 기능과 .NET 4.6 기능이 있습니다.

nameofC #6 기능이므로 최신 컴파일러에서만 실행해야하지만 이전 .NET Framework를 계속 사용할 수 있습니다.

.NET 4.6이 필요한 기능의 예는 다음과 같습니다.

public void Foo(IReadOnlyCollection<string> input)
{
}

public void Main(string[] args)
{
    Foo(new Stack<string>());
}

.NET 4.6에서Stack도구IReadOnlyCollection이전 버전에서는 그렇지 않습니다. 위의 코드는 대상 플랫폼으로 .NET 4.5.2를 선택한 경우 컴파일되지 않습니다.


  • .NET 4.6이없는 머신에이 코드를 배포 할 수 있습니까? 마지막 문장 인 " .NET 프레임 워크 기능에 대해 이야기 할 때 일반적으로 클래스가 포함됩니다. " - what evAR
  • 예, 그렇습니다. 배포 컴퓨터가 VS2015에서 대상으로하는 프레임 워크와 호환되는 프레임 워크를 가지고있는 한. - Eric J.
  • @whatevAR : 기능에 대한 구체적인 예를 들어 설명했습니다.변경 사항 목록은 다음과 같습니다.더 많은 예제를 위해 새로운 .NET Framework 버전에만 적용됩니다. 해당 페이지에없는 경우 활용에 대해 걱정할 필요가 없습니다. 또한 컴파일러는 기능의 사용 가능 여부를 결정하는 데 신뢰할 수 있습니다. - Guvante
  • 프레임 워크 기능에 의해 뒷받침되는 언어 기능이 있습니다. 사용할 수 없습니다.async/await없이IAsyncStateMachine예를 들면. - Jon Hanna

연결된 질문


관련된 질문

최근 질문