2016-07-23 3 views
4

프로필 259를 사용하여 PCL을 .NET Standard 1.0으로 업데이트했으며 이에 따라 해당 NuGet 패키지를 적절히 업데이트하려고합니다. portable-net45+win8+wp8+wpa81에서 netstandard1.0, 으로 실제 DLL을 포함하는 폴더를 변경했지만 패키지의 종속성을 구조화하는 방법을 잘 모르겠습니다..netstandard1.0 NuGet 패키지의 종속성을 올바르게 구조화하는 방법은 무엇입니까?

내가 패키지 (dotnet pack)를 생성하기 위해 .NET 코어 CLI를 사용하는 경우, nuspec 파일의 종속 섹션은 단순히 다음과 같습니다 그러나

<dependencies> 
    <group targetFramework="netstandard1.0"> 
    <dependency id="NETStandard.Library" version="1.6.0" /> 
    </group> 
</dependencies> 

, 나는 고전에이 패키지를 설치할 때.

"polluted packages.config file containing all the dependencies from NETStandard.Library 1.6.0

    : NET 4.5 또는 정지 packages.config을 사용 PCL 프로젝트는,이 파일은 NETStandard.Library 메타 패키지의 모든 종속성 때문에 등으로 "오염"얻는다
  1. 피해야할까요? 이를 수행하는 한 가지 방법은 nuspec 파일 as suggested by Oren Novotny on the GitHub page of NuSpec.ReferenceGenerator에 빈 종속성 그룹을 작성하는 것입니다. 그러나 그는 자신이 one of his recent blog posts에서이를 낙담합니다.
  2. 전체 NETStandard.Library 메타 패키지 또는 실제로 필요한 패키지 만 대상으로해야합니까? .NET Standard/.NET Core가 패키지의 종속성을 지원하는 모든 플랫폼에서 쉽게 실행될 수있는 아이디어가 아니 었습니까?

.NET Core/.NET Standard가 포함 된 NuGet 패키지의 official documentation은 아직 작성되지 않았습니다.

답변

4

.NET Core와 .NET 4.5를 모두 유지 관리하는 패키지에서이 문제를 해결해야했습니다. 접근 방식은 내가 당신의 질문의 두 지점에 터치를 사용

  1. 이 project.json에서 netstandard1.Xnet45 사이의 종속성을 분할. 처음에는 NETStandard.Library 메타 패키지를 사용하여 쉽게 이전 타겟팅을 만듭니다.
  2. NETStandard.Library을 실제로 필요한 특정 패키지에 대한 참조로 바꾸십시오. 첫 번째 단계에서

, 내 project.json은 다음과 같이 보입니다 : 자체는 이미 dependencies에서 이동 중 프레임 워크와 호환

{ 
    "dependencies": { 
     "MyOtherLibrary": "1.0.0" 
    }, 
    "frameworks": { 
     "net45": { 
     "frameworkAssemblies": { 
      "System.Collections":"4.0.0.0" 
     } 
     }, 
     "netstandard1.3": { 
     "dependencies": { 
      "NETStandard.Library": "1.6.0" 
     } 
     } 
    } 
} 

종속성을 특정 .NET 코어 또는 .NET 4.5 동안 의존성은 필요에 따라 각 섹션에 들어갑니다.

dotnet pack을 사용하면 두 형식 중 하나에 설치할 수있는 .nupkg을 하나만 설치하면 해당 프레임 워크에 필요한 것만을 가져올 수 있습니다. 두 번째 단계에서

, 나는 실제로 .NET 코어에 필요한 몇 가지 패키지 NETStandard.Library을 교환 :

{ 
    "dependencies": { 
     "MyOtherLibrary": "1.0.0" 
    }, 
    "frameworks": { 
     "net45": { 
     "frameworkAssemblies": { 
      "System.Collections":"4.0.0.0" 
     } 
     }, 
     "netstandard1.3": { 
     "dependencies": { 
      "System.Threading.Tasks": "4.0.11", 
      "System.Net.Http": "4.1.0" 
     } 
     } 
    } 
} 

이 두 번째 단계는 필요하지 않습니다, 그러나 그것은 최소한의 의존성 패키지를 생산하는 것이 좋다 두 플랫폼 모두. NETStandard.Library은 핵심 API에서 사용해야 할 것이 확실하지 않은 개발 단계에서 유용합니다.

관련 문제