2017-02-27 2 views
2

나는 다음과 같이 서로를 참조하는 세 가지 .NET 프로젝트가 : A와 B는 핵심 프로젝트와 C이다.NET 코어 이적 종속성

AProject-> BProject-> CProject, .NET 4.6 프로젝트입니다.

AProject의 JSON 파일 :

{ 
    "version": "1.0.0-*", 
    "frameworks": { 
    "net46": { 
    "dependencies": { 
    "ProjectB": { 
     "target": "project" 
     } 
     } 
    } 
    } 
} 

BProject의 JSON 파일 :

{ 
    "version": "1.0.0-*", 
    "frameworks": { 
    "net46": { 
    "dependencies": { 
    "ProjectC": { 
     "target": "project" 
     } 
     } 
    } 
    } 
} 

NuGet 복원 및 Visual Studio를 사용하여 작업 벌금을 구축,하지만 NuGet 명령 줄은 다음과 실패 사용하여 복원 오류 :

Unable to resolve 'CProject' for '.NETFramework,Version=v4.6' 

비고 : 솔루션에서 AProject를 제거하거나 다른 .NET 코어 프로젝트로 Cproject를 변경하면 모든 것이 정상적으로 작동합니다. 따라서이 문제는 .NET 4.6 프로젝트에 대한 전이 의존성이있을 때만 발생합니다.

환경 : 당신의 xproj 파일이 여전히 net46하지 netstandard1.3 (이하) 대상 않는

- NuGet Version: 3.5.0.1996 
- Visual studio 2015 
- .NET Core 1.0.1 
+0

.NET 코어 란 무엇입니까? A와 B 모두 netstand'3.3이 아니라'net46'을 대상으로하므로 .NET 코어가 아닙니다. – Tseng

답변

0

먼저, 질문, 모든 .NET 핵심 관련이 없습니다.

유일한 문제는 ProjectC를 참조 할 수 없다는 것이므로 ProjectC를 너겟 패키지에 패키지화하고 너겟 소스를 설정하여 NuGet.Config (http://www.visualstudio.com/en-us/docs/package/nuget/consume)에 추가해야합니다.

또는 Visual Studio 2017을 사용하면 csproj (xproj 및 project.json을 향후 사용되지 않음)에서 4.x * .dll을 직접 참조 할 수 있습니다.

+0

감사합니다. @Tseng, 패키지 프로젝트 C는 옵션이 아닙니다. 해결책을 구성 할 용의가 있습니다. –

+0

또 다른 포인트 : 당신이 설명한대로 C 프로젝트를 참조 할 수 없다고 가정하면, VS로 복구/빌드가 제대로 작동하고 명령 행을 사용하는 데 실패했다는 사실을 어떻게 설명 할 수 있습니까? –

+0

CI에서 너겟 소스를 패키징하고 호스팅 할 수 있습니다. ProjectC에서 특정 명령을 실행하기 만하면됩니다.Dunno가 처음에는 당신에게 효과가있는 것처럼 보였지만 project.json (http://github.com/dotnet/core/issues/184)에서는 지원되지 않는 시나리오였으며, 더 이상 사용되지 않아서 고쳐지지 않을 것입니다. MSBuild 호환 csproj). VS2017로 마이그레이션해야하며 (나중에는 조기에 조만간) csproj 기반 빌딩 파이프 라인을 사용해야합니다. csproj 지원은 VS2015 및 (ASP)에 제공되지 않습니다. .NET Core 1.1은 project.json을 지원하는 마지막 버전입니다 – Tseng

1

내 환경에서 문제를 완전히 재현 할 수있었습니다. NuGet은 packages.config 파일 또는 project.json 파일에서 패키지 기반을 복원합니다. NuGet 명령 줄을 사용하여 .sln 파일을 복원 할 때 NuGet은 각 프로젝트의 packages.config/project.json 파일을 검사합니다.

이 구조체 AProject-> BProject-> CProject의 경우 NuGet은 projectA.json에서 Aproject베이스의 패키지를 복원합니다. 그러나 dependency "ProjectB"는 ProjectA.json 파일에 정의되고, dependencie "ProjectC"는 ProjectB.json 파일에 정의되어 있으며 ProjectC는 nuge 패키지를 관리하기 위해 packages.config를 사용합니다. project.json 파일과 packages.config 간의 정보 변환에는 몇 가지 제한 사항이 있습니다. 따라서 ProjectA.json 파일에서 dependencie "ProjectC"기반을 복원하면 해당 오류가 발생합니다.

이 문제를 해결하려면 CProject를 AProject에 대한 참조로 직접 추가 할 수 있습니다.