如何解决遗留Silverlight / WCF解决方案中的程序集冲突?

本文关键字:解决方案 WCF 程序集 冲突 Silverlight 何解决 解决 | 更新日期: 2023-09-27 18:16:11

我最近做了一个带有实体框架4的传统WCF项目,并将其升级到EF6和。net 4.0。我采用了传统的Silverlight客户端项目并进行了升级。当我向升级后的WCF服务添加新的服务引用时,问题开始出现。服务引用中生成的代码有冲突,无法编译。

我最初的问题是Microsoft.Data.Services.Client和System.Data.Services.Client都是引用的一部分…

CS0433类型'EntitySetAttribute'同时存在"Microsoft.Data.Services。客户端,版本=5.6.4.0,文化=中性,PublicKeyToken=31bf3856ad364e35'和'System.Data.Services.Client,版本=5.0.5.0,文化=中性,PublicKeyToken=31bf3856ad364e35'

当我看到生成的代码References.cs失败时,这更让我惊讶。用法是完全限定的。[global::System.Data.Services.Common.EntitySetAttribute("myTable")]。显然,两个程序集使用完全相同的命名空间。

如果我删除Microsoft.Data.Services.Client,我得到:

错误CS1061 'myEntities4'不包含'DefaultResolveType'和'DefaultResolveType'没有扩展方法可以找到类型为"myEntities"的第一个参数您缺少using指令或程序集引用吗?)

如果我删除System.Data.Services.Client,我得到:

无法加载文件或程序集"System.Data.Services.Client",版本=5.0.5.0,文化=中性,PublicKeyToken=31bf3856ad364e35' or它的一个依赖项。系统找不到指定的文件

在使用RadDataServiceDataSource.DataServiceContext的UserControl的XAML中发现此错误。

我花了几个小时尝试了几种不同的路径,包括:

  • 从NuGet获取旧版本的Microsoft.Data.Services.Client .
  • 只使用一个引用,如上所述。
  • 在客户端添加服务引用之前更改WCF服务中的引用
  • 在添加服务引用时尝试高级选项
    • 重用程序集的所有类型。
    • 在指定的引用程序集中重用类型。

我读了下面的帖子,但是他们没有帮助:

Microsoft.Data.Services.Client.dll与System.Data.Services.Client.dll

WCF错误:需要排除除以下类型之一之外的所有类型。只有匹配的类型才能是有效的引用

项目在更新服务引用后不生成

我正在考虑建立一个新的WCF和Web项目来解决这些问题。这应该是一个漫长的过程,希望不是转移注意力。

这是一个工件从旧版本的Silverlight, WCF,实体框架,或一般。net升级?请帮助我,如果你知道这是什么,或者你以前见过这个。遗憾的是,将项目完全重写到另一个平台是不可行的。

如何解决遗留Silverlight / WCF解决方案中的程序集冲突?

您可以使用以下代码:

EFContext.Configuration.ProxyCreationEnabled = false;
EFContext.Configuration.LazyLoading = false;