4

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

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

删除系统 DLL 引用后:

无法从 'System.Data.Services.Client.SaveChangesOptions [c:\Program Files (x86)\Microsoft WCF Data 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, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。

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

4

2 回答 2

2

我能够很快地重现这个问题。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 和 oData 3.0 API 不适用于 azure 表存储

于 2012-06-04T23:48:46.323 回答
0

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

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

    (请参阅MSDN 博客 - Extern Alais 演练

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

    外部别名 SystemDataV4;

然后你可以有

using SystemDataV4.System.Data.Services.Client;

或者

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

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

于 2014-02-09T22:35:44.180 回答