[C#] 사전 정의 된 유형 ‘System.ValueTuple´2’가 정의되지 않았거나 가져 오지 않았습니다.

Visual Studio 15 Preview 3을 설치하고 새로운 튜플 기능을 사용하려고했습니다.

static void Main(string[] args)
{
    var x = DoSomething();
    Console.WriteLine(x.x);
}

static (int x, int y) DoSomething()
{
    return (1, 2);
}

컴파일 할 때 오류가 발생합니다.

사전 정의 된 유형 ‘System.ValueTuple´2’가 정의되지 않았거나 가져 오지 않았습니다.

블로그 게시물 에 따르면 이 기능은 기본적으로 “설정”되어 있어야합니다.

내가 뭘 잘못 했어?



답변

.NET 4.6.2 이하, .NET Core 1.x 및 .NET Standard 1.x의 경우 NuGet 패키지를 설치해야합니다 System.ValueTuple.

Install-Package "System.ValueTuple"

또는 VS 2017에서 패키지 참조 사용 :

<PackageReference Include="System.ValueTuple" Version="4.4.0" />

.NET Framework 4.7, .NET Core 2.0 및 .NET Standard 2.0에는 이러한 유형이 포함됩니다.


답변

의 일부입니다 .NET Framework 4.7.

위의 프레임 워크 이상 (또는 .NET Core 2.0/ .NET Standard 2.0)을 타겟팅하지 않는 한 참조해야합니다 ValueTuple. 이 작업을 추가하여System.ValueTuple NuGet Package


답변

ValueTuple 유형은 최신 프레임 워크에 내장되어 있습니다.

  • .NET Framework 4.7
  • .NET 코어 2.0
  • 모노 5.0
  • .Net 표준 2.0

새로운 프레임 워크 버전 중 하나를 대상으로 할 때까지 ValueTuple 패키지를 참조해야합니다.

자세한 내용은 http://blog.monstuff.com/archives/2017/03/valuetuple-availability.html


답변

들어 비주얼 스튜디오 코드 에 내장 된 사용 터미널 및 실행 :

dotnet add package "System.ValueTuple"

dotnet restore나중에 달리는 것을 잊지 마십시오 .


답변

VS 용 .NET 4.6.2 Developer Pack 이 설치되어 있는지 확인한 다음 System.ValueTupleNuGet 에서 패키지를 가져 오십시오.


답변

다른 사람들이 같은 문제를 겪고 있다면 프로젝트를 4.7로 업데이트 한 후이 오류가 발생했습니다. 이상하게 도이 오류가 사라지려면 System.ValueTuple 참조를 제거해야했습니다.


답변

ValueTuple.net Framework 프로젝트에 패키지 참조로 추가하는 것은 좋지 않습니다 . 아시다시피이 어셈블리는 4.7 .NET Framework에서 사용할 수 있습니다.

프로젝트가 ValueTuple패키지 폴더 대신 .NET Framework 폴더의 모든 비용을 포함하려고 할 때 특정 어셈블리가 발견되지 않는 오류가 발생할 수 있습니다.

우리는 오늘 회사에서이 문제를 겪었습니다. 우리는 2 개의 프로젝트로 솔루션을 가지고있었습니다 (나는 그것을 단순화했습니다).

  • Lib
  • Web

LibValueTuple을 포함하고을 사용하고 Web있었습니다 Lib. 그것은 알 수없는 이유에 의해 밝혀졌다 Web에 해결 경로로 시도 할 때 ValueTuple가졌다 HintPath.NET 프레임 워크 디렉토리에 잘못된 버전을 복용했다. 그로 인해 애플리케이션이 충돌했습니다. ValueTuple에 정의되지 않은 .csprojWebHintPath그 조립. 문제는 매우 이상했다. 일반적으로 패키지 폴더에서 어셈블리를 복사합니다. 이번은 정상이 아니었다.

나를 위해 항상 System.*패키지 참조 를 추가하는 것은 위험합니다 . 그들은 종종 시한 폭탄과 같습니다. 그들은 처음에는 괜찮으며 최악의 순간에 당신의 얼굴에서 폭발 할 수 있습니다. 내 규칙 : .NET Framework에System.* Nuget 패키지를 사용하지 마십시오 실제로 필요하지 않은 경우 .

프로젝트 내의 파일에 수동 ValueTuple으로 추가하여 문제를 해결 했습니다..csprojWeb