【问题标题】:Using Microsoft.Data.Services.Client.dll instead of System.Data.Services.Client.dll causes issues with Azure.StorageClient使用 Microsoft.Data.Services.Client.dll 而不是 System.Data.Services.Client.dll 会导致 Azure.StorageClient 出现问题
【发布时间】:2012-05-20 16:19:54
【问题描述】:

我们有一个使用 WCF 5.0 和 WindowsAzure SDK 的项目。

有两个引用 Microsoft.Data.Services.Client.dll 和 System.Data.Services.Client.dll,它们存在冲突。如果我删除系统 DLL(根据 this),我将无法使用 windowsAzure SDK。如果我删除 Microsoft DLL,我将无法利用 WCF 的新功能,特别是 OData 3.0 版。

删除系统 DLL 引用后:

无法从 'System.Data.Services.Client.SaveChangesOptions [c:\Program Files (x86)\Microsoft WCF 数据 Services\5.0\bin.NETFramework\Microsoft.Data.Services.Client.dll]' 到 'System.Data.Services.Client.SaveChangesOptions'

附加信息:

最好的重载方法匹配 'Microsoft.WindowsAzure.StorageClient.TableServiceContext.SaveChangesWithRetries(System.Data.Services.Client.SaveChangesOptions)' 有一些无效的参数

定义了“System.Data.Services.Client.DataServiceContext”类型 在未引用的程序集中。您必须添加对 程序集'System.Data.Services.Client,版本=3.5.0.0, 文化=中性,PublicKeyToken=b77a5c561934e089'。

如果我删除对 Microsoft.Data.Services.Client 的引用并添加对 System.Data.Services.Client 的引用,那么我们不会收到任何错误 - 我们也不会收到 WCF 5.0!

【问题讨论】:

  • 我最近更新了对 WCF 5.0 的引用,但没有发现任何问题。与您所做的唯一不同的是,我已经替换了我项目中的其他引用(如 System.Data.Services 到 Microsoft.Data.Services)。您的问题似乎与 Azure.StorageClient 无关,而是与命名空间冲突有关。
  • 不知何故 Azure.Storage.Client 需要 System.Data.Services.Client 而不是 Microsoft.Data.Services.Client。我将更新我的原始帖子以显示更多错误。

标签: wcf azure odata


【解决方案1】:

我能够很快地重现这个问题。 Microsoft.WindowsAzure.StorageClient.Dll 对 System.Data.Service.Client.Dll 具有直接引用依赖关系,如下所示,因此如果要使用 Azure 存储客户端 API,则必须引用 System.Data.Service.Client.Dll在您的应用程序中,并确保您不能使用 WCF 5.0 SDK 提供的 oData 3.0。更多信息发布在下面的 SO 问题中:

WCF 5.0 and oData 3.0 API not work with azure table storage

【讨论】:

    【解决方案2】:

    您可以使用 extern alias 来区分除了它们所在的程序集之外完全相同的两个类型名称。

    1. 为 System.Data.Services.Client 设置别名 - 比如 SystemDataV4

      (见MSDN Blogs - Extern Alais Walkthrough

    2. 在 .cs 文件的最顶部使用

      外部别名 SystemDataV4;

    那么你可以拥有

    using SystemDataV4.System.Data.Services.Client;
    

    serviceContext.SaveChangesWithRetries(SystemDataV4.System.Data.Services.Client.SaveChangesOptions.ReplaceOnUpdate);
    

    注意命名空间的前缀和别名,例如SystemDataV4.System.Data.Services...

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 2023-03-05
      • 1970-01-01
      • 2023-04-04
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2015-04-09
      相关资源
      最近更新 更多