다른 패키지 Y에 따라 패키지 X가 있습니다. 기본적으로 (Visual Studio 2015 Upd3 + nuget 3.5) 패키지 X를 참조하는 프로젝트는 패키지 Y를 참조하여 업데이트됩니다. 문제는 X의 고객은 Y에 대한 참조가 전혀 필요 없다는 것입니다. Y 패키지의 API는 고객에게 노출되어서는 안되며 노출되어서는 안되기 때문입니다.비 transitive 패키지 종속성?
예상되는 동작은 다음과 같습니다. 패키지 X에 대한 참조를 추가 한 후 패키지 Y의 내용을 빌드시 출력 폴더에 복사해야하지만 패키지 Y를 프로젝트 참조에 추가해서는 안됩니다.
그렇게 할 방법이 있습니까?
이론적으로 우리는 프로젝트 X에 인프라 패키지 Y의 소스를 포함 할 수 있습니다 (두 프로젝트 모두 MIT 라이센스하에 opensource 임). 그러나 다소 표준적인 접근 방법을 선호합니다. 우리가 필요한 이유 경우
예 :
우리가 지금 조사하고 사례 : 테스트 도우미와 nuget 패키지 PDB 파일은 소스 (참조
Microsoft.DiaSymReader
패키지)에 일치하는지 확인합니다. 모든 테스트 프로젝트에서Microsoft.DiaSymReader
어셈블리를 참조하기를 원하지 않습니다.더 많거나 적게 이론적 인 것입니다 (현재 문제는 아니지만 프로젝트가 프로덕션으로 보내지면 문제가됩니다) : Roslyn을 사용하여 스크립트를 컴파일하고 실행하는 사용자 정의 스크립트 엔진. 우리는 스크립트 엔진을 사용할 모든 프로젝트에서 Roslyn 어셈블리에 대한 참조를 원하지 않습니다.
후자의 경우는 우리가 너무 분명, 우리의 프로젝트에 로슬린 소스를 병합 할 수 없습니다, 우리의 패키지의 일환으로 로슬린 바이너리를 배포 할 수 없습니다만큼 나쁘다.
모든 의견을 환영합니다!
예,이 옵션도 고려 중이지만 해석 할 수없는 종속성 충돌이 발생할 수 있습니다. 예 : YDK v1.0을 패키지 X의 일부로 제공하고 타사 프로젝트가 패키지 X를 참조한 다음 패키지 Y v2.0에 대한 명시 적 참조를 추가합니다. Roslyn과 같은 대규모 인프라 종속성은 분명히 없습니다. 따라서 우리는 일반적인 너겟 의존성을 유지하면서 고객의 프로젝트 참조에 포함시키지 않는 편을 선호합니다. – Sinix