다음을 통해 공유


NuGet 경고 NU5128

시나리오 1

nuspec 및 lib/ref 폴더의 종속성 그룹에 선언된 일부 대상 프레임워크는 다른 위치에서 정확히 일치하지 않습니다. 아래 작업 목록을 참조하세요.

  • 에 대한 종속성 그룹을 추가합니다. NUSpec에 대한 NETStandard2.0

문제

패키지의 디렉터리에는 lib/<tfm>/ 경고 메시지에 지정된 TFM(대상 프레임워크 모니커)에 대한 파일이 하나 이상 포함되어 ref/<tfm>/ 있습니다. 그러나 파일에 이 TFM nuspec 에 대한 종속성 그룹이 없습니다. 이로 인해 패키지 소비자는 패키지에 종속성이 없더라도 패키지가 TFM과 호환되지 않는다고 생각하게 될 수 있습니다. 패키지에 선언되지 않은 종속성이 있는 경우 패키지를 사용하는 프로젝트에 런타임 오류가 발생합니다.

솔루션

  • 프로젝트에서 NuGet의 팩 대상 실행

가능하면 프로젝트의 대상 프레임워크에서 종속성 그룹과 어셈블리 TFM을 자동으로 일치하므로 NuGet의 MSBuild 팩 대상을 사용합니다. 프로젝트는 자체 NuGet 종속성에 사용해야 PackageReference 합니다. 프로젝트에서 packages.config를 사용하는 경우 파일과 nuspec 함께 사용해야 nuget.exe pack 합니다.

  • 수동으로 편집한 nuspec 파일

사용자 지정 nuspec 파일을 사용하는 경우 종속성이 호환되는 lib/ ref/ 다음 TFM과 동일한 경우에도 일치하는 종속성 그룹이 있거나 어셈블리가 있는 각 TFM을 사용하는 것이 좋습니다. 예를 들어 패키지에 어셈블리와 netstandard2.0 어셈블리가 포함되어 netstandard1.0 있고 종속성이 둘 다 동일한 경우 두 TFM을 중복 종속성 항목이 있는 종속성 그룹으로 나열하는 것이 좋습니다.

어셈블리 경로에 사용되는 TFM 식별자는 종속성 그룹에 사용되는 TFM 식별자와 다른 형식을 사용합니다. 경고 메시지는 종속성 그룹에서 사용할 올바른 이름을 지정합니다. 패키지에 해당 대상 프레임워크에 대한 종속성이 없는 경우 빈 그룹을 사용합니다. 예시:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • lib/ 또는 ref/ 파일 제거

패키지가 보고된 TFM과 호환되지 않도록 하려면 해당 TFM에 대한 패키지에 파일이 없거나 파일이 없 lib/<tfm>/ ref/<tfm>/ 도록 프로젝트를 수정합니다. 예를 들어 경고에 대한 .NETFramework4.7.2 종속성 그룹을 추가하라는 경고가 nuspec표시되면 패키지에서 모든 lib/net472/* 파일과 ref/net472/* 파일을 제거합니다.

시나리오 2

nuspec 및 lib/ref 폴더의 종속성 그룹에 선언된 일부 대상 프레임워크는 다른 위치에서 정확히 일치하지 않습니다. 아래 작업 목록을 참조하세요.

  • netstandard2.0 대상 프레임워크에 대한 lib 또는 ref 어셈블리 추가

문제

nuspec 파일에는 보고된 TFM(대상 프레임워크 모니커)에 대한 종속성 그룹이 있지만 이 TFM에 대한 어셈블리가 lib/ ref/없거나 호환되는 TFM에 대한 어셈블리가 있는 경우 패키지는 여전히 설치되지만 컴파일 시간에 사용되는 어셈블리에 대한 종속성이 올바르지 않아 런타임에 프로젝트가 실패할 수 있습니다.

솔루션

  • 프로젝트에서 NuGet의 팩 대상 실행

가능하면 프로젝트의 대상 프레임워크에서 종속성 그룹과 어셈블리 TFM을 자동으로 일치하므로 NuGet의 MSBuild 팩 대상을 사용합니다. 프로젝트는 자체 NuGet 종속성에 사용해야 PackageReference 합니다. 프로젝트에서 packages.config를 사용하는 경우 파일과 nuspec 함께 사용해야 nuget.exe pack 합니다.

  • 수동으로 파일 편집 nuspec

보고된 TFM을 프로젝트가 컴파일하는 추가 대상 프레임워크로 추가하고 패키지에 어셈블리를 추가합니다. SDK 스타일 프로젝트를 사용하여 여러 TFM을 다중 대상으로 지정하는 경우 NuGet의 MSBuild 팩 대상은 자동으로 올바른 폴더에 어셈블리를 추가하고 올바른 lib/<tfm>/ TFM 및 종속성을 사용하여 종속성 그룹을 만들 수 있습니다. 비 SDK 스타일 프로젝트를 사용하는 경우 추가 TFM에 대한 추가 프로젝트 파일을 만들고 파일을 수정하여 패키지의 올바른 위치에 출력 어셈블리를 복사해야 할 수 있습니다 nuspec .

  • _._ 파일 추가

패키지에 메타 패키지와 같은 어셈블리가 없는 경우 경고 메시지에 나열된 TFM의 lib/<tfm>/ 디렉터리에 빈 _._ 파일을 추가하는 것이 좋습니다. 예를 들어 대상 프레임워크에 대한 어셈블리를 추가하라는 경고가 netstandard2.0 표시되면 패키지에 빈 lib/netstandard2.0/_._ 파일을 만듭니다.

  • 종속성 그룹 제거

사용자 지정 nuspec 파일을 사용하는 경우 보고된 TFM에 대한 종속성 그룹을 제거하고 있는 TFM 또는 ref/<tfm>/ 파일이 있는 lib/<tfm>/ TFM에 대한 종속성 그룹만 남습니다.

  • 어셈블리와 관련이 없는 패키지에 대한 모든 종속성 제거

패키지에 파일이 없거나 lib/ ref/ 메타 패키지가 아닌 경우 패키지 소비자가 필요로 하는 종속성이 없을 수 있습니다. NuGet의 MSBuild 팩 대상으로 압축하는 경우 프로젝트 파일에서 설정할 <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> PropertyGroup 수 있습니다. 사용자 지정 nuspec 파일을 사용하는 경우 요소를 제거합니다 <dependencies> .

  • 기타 시나리오

이 경고는 NuGet 5.3 개발 중에 추가되었으며, 먼저 .NET Core SDK 3.0 미리 보기 9에서 사용할 수 있었습니다. NuGet/Home#8583 은 너무 많은 시나리오에서 경고가 발생한 문제를 추적합니다. MSBuild 속성을 사용할 NoWarn 수 있습니다(프로젝트 파일의 모든 PropertyGroup 항목에 추가<NoWarn>$(NoWarn);NU5128</NoWarn>). 영향을 받는 프로젝트가 여러 개인 경우 모든 프로젝트에 자동으로 추가할 NoWarn 수 있습니다Directory.Build.targets.