2013-11-23 4 views
3

여러 프로젝트가 포함 된 VS2013 솔루션을 만들었습니다. 이 프로젝트 중 하나는 .NET 4.5+, Silverlight 5, Windows Store 8+ 및 Windows Phone 8을 대상으로하는 이식 가능한 클래스 라이브러리이며이 프로젝트는 함께 제공되는 웹 응용 프로그램에서 OData 서비스에 대한 참조를 포함합니다.어셈블리 'Microsoft.Data.Services.Client.Portable ...'및 NUGET에 대한 참조를 추가해야합니다.

이식 가능한 클래스 라이브러리는 nuget (WCF Data Services Client)를 통해 추가 된 Microsoft.Data.Services.Client.Portable을 참조합니다.

다음은 휴대용 클래스 라이브러리를 WPF (.NET 4.5) 응용 프로그램, Windows 저장소 응용 프로그램 및 Windows Phone 응용 프로그램에 추가하고 서비스에 액세스하기위한 몇 가지 기본적인 테스트 코드를 작성했습니다. 이 기능은 Windows Store 및 Windows Phone에서 잘 작동합니다.

그러나 WPF 응용 프로그램은 컴파일되지 않습니다. 오류는

  • 유형 'System.Data.Services.Client.DataServiceContext은'이 참조되지 않은 어셈블리에 을 정의 ...입니다. 어셈블리 'Microsoft.Data.Services.Client.Portable, Version = 5.6.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'에 대한 참조를 추가해야합니다.
  • 'System.Data.Services.Client.DataServiceQuery`1'형식이 참조되지 않은 어셈블리에 정의되어 있습니다. 'Microsoft.Data.Services.Client.Portable, Version = 5.6.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'어셈블리에 대한 참조를 추가해야합니다.

것은 나 또한 nuget를 통해 WPF 응용 프로그램에 WCF 데이터 서비스 클라이언트를 추가,하지만 대신 전체 프레임 워크 4.0 버전에 대한 참조를 추가하는 휴대용 라이브러리 (packages\Microsoft.Data.Services.Client.5.6.0\lib\portable-net45+sl5+wp8+win8\Microsoft.Data.Services.Client.Portable.dll)에 대한 참조를 추가하지 않습니다 (packages\Microsoft.Data.Services.Client.5.6.0\lib\net40\Microsoft.Data.Services.Client.dll) - 내가보기에 오류가 발생합니다.

여기에 잘못된 것이 있습니까? 아니면 설치 패키지에 오류가 있습니까? 문제가되는 참조를 삭제하고 대체 참조를 수동으로 추가하면 모든 작업이 정상적으로 처리되므로 작업 오류가 발생했는지 여부를 계속 알고 싶습니다.

답변

3

NuGet 소스 코드를 보면이 동작이 의도적으로 설계된 것으로 보입니다.

WCF Data Services Client는 다음과 같은 프레임 워크에 대한 어셈블리를 포함

  • .NET 프레임 워크 버전 4.0
  • .NET 휴대용, net45, SL5, WP8, win8
  • 실버, 4.0

이 NuGet 패키지를 .NET 4.5를 대상으로하는 프로젝트에 설치하면 NuGet 패키지의 .NET 4.0 어셈블리가 참조됩니다. NuGet은보다 구체적인 .NET 프레임 워크를 .NET 4.5를 대상으로하는 WPF 프로젝트와 더 잘 어울리는 것으로 간주합니다.

NuGet 패키지에서 가장 일치하는 어셈블리를 찾을 때 NuGet source code에 이에 대한 설명이 있습니다.

// Let's say a package has two framework folders: 'net40' and 'portable-net45+wp8'. 
// The package is installed into a net45 project. We want to pick the 'net40' folder, even though 
// the 'net45' in portable folder has a matching version with the project's framework. 
+0

위대한 발견; 나는 당신이 나를 옹호 해 왔다고 생각하지만, 휴대용 버전으로 바뀔 때까지 결과 코드를 컴파일 할 수 없다는 점을 감안할 때, 그들이 한 일이 올바른지 (이 패키지의 경우) 맞는지 확신 할 수 없다. 감사. –

관련 문제