2013-11-23 44 views
3

我已創建包含多個項目的VS2013解決方案。其中一個項目是一個面向.NET 4.5+,Silverlight 5,Windows Store 8+和Windows Phone 8的可移植類庫,該項目包含對隨附Web應用程序中的OData服務的引用。您必須添加對程序集「Microsoft.Data.Services.Client.Portable ...」的引用。&NUGET

可移植類庫引用Microsoft.Data.Services.Client.Portable(等等),通過nuget(WCF數據服務客戶端)添加。

然後,我已經將可移植類庫添加到WPF(.NET 4.5)應用程序,Windows應用商店應用程序和Windows Phone應用程序,並編寫了一些非常基本的測試代碼以訪問該服務。這在Windows Store和Windows Phone中工作正常。

然而,WPF應用程序不會編譯。這些錯誤是...

  • 類型「System.Data.Services.Client.DataServiceContext」在未引用的程序集定義 。您必須添加對組件'Microsoft.Data.Services.Client.Portable,版本= 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'的引用。

的事情是,我還添加了WCF數據服務客戶端通過的NuGet WPF應用程序,但它不添加一個引用到便攜式庫(packages\Microsoft.Data.Services.Client.5.6.0\lib\portable-net45+sl5+wp8+win8\Microsoft.Data.Services.Client.Portable.dll),而不是增加了完整的框架4.0版本的引用(packages\Microsoft.Data.Services.Client.5.6.0\lib\net40\Microsoft.Data.Services.Client.dll) - 這反過來導致了我所看到的錯誤。

有沒有什麼我在做錯了或者這是安裝包中的錯誤?請注意,如果我刪除違規引用並手動添加替代引用,那麼一切都很好,儘管我有一個解決方法,但我仍然想知道我是否是錯誤的原因。

回答

3

看着NuGet源代碼,這種行爲似乎是由設計。

WCF Data Services Client該組件包含用於以下框架:

  • .NET框架中,V4.0
  • .NET可移植,net45,SL5,WP8,win8的
  • Silverlight中,V4.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

很好找;我認爲你已經證明了我的身份,但是我仍然不確定他們所做的是否正確(對於這個軟件包),因爲生成的代碼在交換到便攜版本之前無法編譯。謝謝。 –

相關問題