2016-10-04 5 views
2

솔루션에 2 개의 프로젝트가 있습니다. 첫 번째는 .NET 표준 1.3을 목표로하는 이식 가능한 라이브러리입니다. 이 라이브러리는 Json.NET에 종속되어 있습니다. 그 project.json은 다음과 같습니다 :.NET 4.6.1 응용 프로그램에서 .NET Standard 1.3 라이브러리를 참조 할 때 종속성이 작동하지 않습니다.

{ 
    "supports": {}, 
    "dependencies": { 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
    "NETStandard.Library": "1.6.0", 
    "Newtonsoft.Json": "9.0.1" 
    }, 
    "frameworks": { 
    "netstandard1.3": {} 
    } 
} 

도서관은이 간단한 클래스로 구성

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace TestLibrary 
{ 
    public class TestClass 
    { 
     public static string Foo() { 
      return JsonConvert.SerializeObject(42); 
     } 
    } 
} 

두 번째 프로젝트는 전체 .NET에게 4.6.1 프레임 워크를 대상으로 콘솔 응용 프로그램입니다. 이 콘솔 앱은 위에서 언급 한 라이브러리를 참조합니다.

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var x = TestLibrary.TestClass.Foo(); 
     } 
    } 
} 

내가 구축하고 실행할 수 있어요,하지만 다음과 같은 예외 TestLibrary.TestClass.Foo() 결과 전화 : 코드는 다음입니다

파일이나 어셈블리 'Newtonsoft.Json, 버전 = 9.0를로드 할 수 없습니다입니다. 0.0, 문화 = 중립, PublicKeyToken = 30ad4fe6b2a6aeed '또는 그 종속성 중 하나. 지정한 파일을 찾을 수 없습니다. ":"Newtonsoft.Json, 버전 = 9.0.0.0, 문화 = 중립, PublicKeyToken = 30ad4fe6b2a6aeed "내 bin 폴더에는 Newtonsoft.Json.dll가 없습니다

내가있다. 비주얼 (2016년 9월 14일에 발표 14.0.25431.01) 스튜디오 설치 2015 업데이트 3 (KB3165756)과 .NET의 핵심 1.0.1 VS 2015 공구 미리보기 2.

인터넷 검색 너무 많은 시간을 소비 한 후, 나는 ' a) 내가 틀린 일을하고 있는지 확실하지 않음 b) 툴링이이 시나리오를 아직 지원하지 않음 c) Visual Studio 설치가 어떻게 든 손상됨.

편집 : 여기에 complete solution to reproduce입니다.

+0

ClassLibrary 및 콘솔 응용 프로그램은 모두 .NET 핵심 응용 프로그램입니까? 둘 다 만듭니다.귀하의 설명을 기반으로 NET 코어 ClassLibrary 및 콘솔 애플 리케이션, 나는 어떤 오류 메시지가 나타납니다. 가능한 경우 샘플 프로젝트를 제공하고 프로젝트 또는 VS 설치에 문제가 있는지 여부를 확인하기 위해 내 측면에서 앱을 실행합니다. –

+0

아니요, .NET 코어가 아닙니다. 라이브러리는 .NET 표준 1.3을 대상으로하는 PCL이며 콘솔 응용 프로그램은 전체 .NET 4.6.1 프레임 워크를 대상으로합니다. 샘플 프로젝트 [here] (http://www.esentio.sk/temp/testdependencies.zip) (현재 GitHub를 사용할 수 없음)를 찾을 수 있습니다. – Stalker

답변

2

PCL 라이브러리 프로젝트는 project.json 파일로 패키지를 관리하지만 공용 .NET Framework 프로젝트는 packages.config로 NuGet 패키지를 관리합니다.

콘솔 응용 프로그램에 Newtonsoft.Json 패키지를 수동으로 설치하면 테스트를 거쳐 성공적으로 실행할 수 있습니다. 또한 project.json 파일로 NuGet 패키지를 관리하는 .NET Core Console 응용 프로그램을 사용하여 PCL 라이브러리 프로젝트를 참조하면 솔루션도 성공적으로 실행될 수 있습니다.

그래서 상황에 따라 PCL 라이브러리 프로젝트에있는 NuGet 패키지를 콘솔 응용 프로그램에 수동으로 설치해야합니다.

+1

예, 콘솔 앱에 종속성을 설치하면 작동합니다. 그리고 예, project.json/packages.config differencies와 관련이 있다고 생각합니다. 그러나 중요한 질문은 남아 있습니다 :이 시나리오는 툴링에 의해 지원되지 않는 것입니까? 앞으로 수정 될 예정입니까? 나는 그것에 대한 대답을 찾을 수 없다 (어쩌면 나는 단지 그것을 찾기에 나쁘다). 내 실제 시나리오는 훨씬 더 복잡하고 표준 라이브러리 프로젝트를 참조하는 모든 프로젝트에서 종속성을 복제해야하는 경우 성가시다. 어쨌든, 문제를 해결하기 때문에 답을 받아 들일 것입니다. – Stalker

+0

이 시나리오가 지원되지 않는지에 대한 소식도 없습니다. NuGet의 문서에 따르면 "자세한 내용은 행동 강령 FAQ를 참조하거나 추가 질문이나 의견이있는 경우 [email protected]에 문의하십시오." 따라서이 문제를 제출하려면 [email protected]에 문의하십시오. –

+0

project.json이 더 이상 .net 표준으로 사용되지 않으므로 허용되는 답변이 오래되었습니다. 그들은 이제 .csproj를 사용합니다. – trampster

2

.NET 표준 라이브러리의 종속성을 수동으로 설치할 필요는 없습니다.

마이크로 소프트는 마침내 NuGet 버전 4.0.1에서 VS2017이 출시 된 후 NuGet 4에 대한 첫 번째 업데이트 인 will fix을 문제로 인정했습니다.

더 깨끗한 해결 방법은 레거시 (이 경우 .NET 4.6.1 응용 프로그램) 프로젝트에 <RestoreProjectStyle>PackageReference</RestoreProjectStyle>을 추가하는 것입니다. 그러나 according to Rob Relyea MS는 RTM 이후에이 속성을 무시하므로 다른 해결 방법은 <PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/>입니다.

또 다른 해결 방법은 that answer과 같은 NuGet 패키지에 .NET 표준 라이브러리를 압축하는 것이지만 가장 쉬운 방법은 아닙니다.