Programing

Visual Studio 2017 및 C # 7.0을 사용하는 메서드에서 Tuple을 반환 할 수 없습니다.

crosscheck 2020. 9. 12. 09:07
반응형

Visual Studio 2017 및 C # 7.0을 사용하는 메서드에서 Tuple을 반환 할 수 없습니다.


일주일 전에 릴리스 된 Visual Studio 2017 Community를 설치했고 C # 7의 새로운 기능을 탐색하기 시작했습니다.

그래서 두 가지 값을 반환하는 간단한 메서드를 만들었습니다.

public class Program
{
    public static void Main(string[] args)
    {
        (int sum, int count) a = ReturnTwoValues();
    }

    static (int sum, int count) ReturnTwoValues() => (1, 1);
}

컴파일러에서 오류가 발생합니다.

오류 CS8137 컴파일러 필수 형식 'System.Runtime.CompilerServices.TupleElementNamesAttribute'를 찾을 수 없기 때문에 튜플을 활용하는 클래스 또는 멤버를 정의 할 수 없습니다. 참조가 누락 되었습니까?

이 이름으로 프레임 워크에서 참조를 찾으려고했지만 운이 없었습니다!

C # 7.0 기능을 사용하기 위해 추가 항목이 필요한 경우 모든 프로젝트에 대해 수행해야하는 것이 매우 이상합니다.


이 작업을 수행하기 위해 다음 단계를 설명하는 Roslyn 에서이 페이지를 살펴 보았습니다 .

  1. C # 프로젝트 시작
  2. System.ValueTupleNuGet (시험판)에서 패키지에 대한 참조 추가

여기에 이미지 설명 입력

이러한 단계에 따라 이제 작동합니다. 하지만 우리가 시작하는 모든 단일 프로젝트에 대해 그렇게해야한다는 것은 정말 이상합니다! 공식 릴리스에 도달하면이 문제가 해결되기를 바랍니다!


.Net 4.7 Framework를 설치하고 프로젝트를 .Net 4.7을 대상으로 변경 한 후이 오류가 발생하기 시작했습니다.

이제 ValueTuple이 .Net 4.7에 포함되어 있으므로 수동으로 ValueTuple을 참조 할 필요가 없습니다.

컴파일 오류를 수정하기 위해해야 ​​할 일은 내 프로젝트의 참조에서 System.ValueTuple에 대한 참조를 제거하는 것뿐이었습니다.


.NET 4.6.2에서 .NET 4.7.2로 업그레이드하면서이 문제를 겪었습니다. 불행히도 System.ValueTuple내가 사용하는 다른 NuGet 패키지가 이에 의존 하기 때문에 패키지 참조를 제거 할 수 없습니다 .

마지막으로 근본 원인을 찾을 수있었습니다 mscorlib.dll. 프로젝트 폴더 (게시 작업의 출력)에 .NET 4.6.2 버전이 있고 MSBuild는 공식 .NET 4.7.2 참조 대신이 어셈블리를 참조하기로 결정했습니다. 조립에 있습니다 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2.

System.ValueTuple이 .NET 4.7에 도입 되었기 때문에 MSBuild는 .NET 4.6.2의 참조 어셈블리에서 형식을 찾을 수 없기 때문에 컴파일에 실패했습니다.

참고 URL : https://stackoverflow.com/questions/40826704/unable-to-return-tuple-from-a-method-using-visual-studio-2017-and-c-sharp-7-0

반응형