【问题标题】:How Can I Resolve an Assembly Conflict in a Legacy Silverlight / WCF Solution?如何解决旧 Silverlight / WCF 解决方案中的程序集冲突?
【发布时间】:2017-03-15 23:45:53
【问题描述】:

我最近使用 Entity Framework 4 进行了一个旧的 WCF 项目,并将其升级到 EF6 和 .NET 4.0。我采用了旧版 Silverlight 客户端项目并进行了升级。当我向升级的 WCF 服务添加新服务引用时,问题开始出现。服务引用中生成的代码有冲突,无法编译。

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

CS0433 'EntitySetAttribute' 类型存在于两者中 'Microsoft.Data.Services.Client,版本=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' 或 它的依赖项之一。系统找不到指定的文件。

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

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

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

我已阅读以下帖子,但它们没有帮助:

Microsoft.Data.Services.Client.dll vs System.Data.Services.Client.dll

WCF error: Need to exclude all but one of the following types. Only matching types can be valid references

Project does not build after updating a service reference

我现在正在考虑构建一个新的 WCF 和 Web 项目来解决这些问题。这也应该是一项漫长的工作,希望不是红鲱鱼。

这是从旧版 Silverlight、WCF、Entity Framework 或 .NET 升级的产物吗?如果你知道这是什么,或者你以前看过这个,请帮助我。不幸的是,将项目完全重写到另一个平台不是一种选择。

【问题讨论】:

  • 我不知道具体答案,但请尝试查看 fuslogvw.exe 和程序集绑定重定向。

标签: c# .net wcf silverlight


【解决方案1】:

您可以使用此代码:

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

【讨论】:

  • 我把这段代码放在哪里?在生成的服务引用中还是在服务本身中?
  • 在服务代码中,当使用获取数据表db时。
  • 公共类 MyService{ [OperationContract]public Users[] GetUsers(){ var EFContext = new MyEntity(); EFContext.Configuration.ProxyCreationEnabled = false; EFContext.Configuration.LazyLoading = false; var 结果=EFContext.Users.tolist();返回结果; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2011-01-12
相关资源
最近更新 更多