【问题标题】:You must add a reference to assembly 'Microsoft.Data.Services.Client.Portable...' & NUGET您必须添加对程序集“Microsoft.Data.Services.Client.Portable...”和 NUGET 的引用
【发布时间】:2013-11-23 15:07:19
【问题描述】:

我创建了一个包含多个项目的 VS2013 解决方案。其中一个项目是面向 .NET 4.5+、Silverlight 5、Windows Store 8+ 和 Windows Phone 8 的可移植类库,该项目包含对随附 Web 应用程序中的 OData 服务的引用。

可移植类库引用 Microsoft.Data.Services.Client.Portable(以及其他),通过 nuget(WCF 数据服务客户端)添加。

然后,我将可移植类库添加到 WPF (.NET 4.5) 应用程序、Windows Store 应用程序和 Windows Phone 应用程序中,并编写了一些非常基本的测试代码来访问该服务。这在 Windows 应用商店和 Windows Phone 中运行良好。

然而,WPF 应用程序不会编译。错误是...

  • 已定义类型“System.Data.Services.Client.DataServiceContext” 在未引用的程序集中。您必须添加对 程序集'Microsoft.Data.Services.Client.Portable,版本=5.6.0.0, 文化=中性,PublicKeyToken=31bf3856ad364e35'。
  • 类型“System.Data.Services.Client.DataServiceQuery`1”在 未引用的程序集。您必须添加对程序集的引用 'Microsoft.Data.Services.Client.Portable,版本=5.6.0.0, 文化=中性,PublicKeyToken=31bf3856ad364e35'。

问题是,我还通过 nuget 将 WCF 数据服务客户端添加到 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) - 这反过来又导致了我看到的错误。

我在这里做错了什么还是安装包中的错误?请注意,如果我删除有问题的引用并手动添加替代引用,那么一切都很好,所以尽管我有一个解决方法,但我仍然想知道我是否是错误的原因。

【问题讨论】:

    标签: wpf nuget wcf-data-services visual-studio-2013


    【解决方案1】:

    查看 NuGet 源代码,这种行为似乎是设计使然。

    WCF Data Services Client 包含以下框架的程序集:

    • .NET 框架,v4.0
    • .NET Portable、net45、sl5、wp8、win8
    • Silverlight,v4.0

    将此 NuGet 包安装到以 .NET 4.5 为目标的项目中将导致 NuGet 包中的 .NET 4.0 程序集被引用。 NuGet 认为更具体的 .NET 框架更适合您以 .NET 4.5 为目标的 WPF 项目。

    NuGet source code 在 NuGet 包中寻找最佳匹配程序集时对此有评论。

    // 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.
    

    【讨论】:

    • 很棒的发现;我认为你已经证明了我的正确性,但我仍然不确定他们所做的是否正确(对于这个包),因为生成的代码在交换到可移植版本之前无法编译。谢谢。
    猜你喜欢
    • 2012-03-31
    • 2018-09-30
    • 2016-09-24
    • 2022-09-29
    • 2019-11-26
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多