8

我有一个网络服务和一个客户端。参数和返回类型中使用的类位于两者共享的公共 DLL 中。但是,每当我更新 Web 参考时,Visual Studio 都会生成具有相同名称和公共属性和方法的类的副本。然后解决方案将无法编译,因为客户端代码尝试使用公共 DLL 中的版本。我可以通过在每次更新 Web 引用时删除“重复”类并添加一个 using 语句来指向公共 dll 的命名空间来解决该问题。有没有办法永久解决这个问题?

更新:请参阅下面的评论。这是 asmx Web 服务的一个“特性”。除了以下之一之外,别无他法:1) 使用更现代的 Web 服务类型。2) 不要使用通用 DLL 3) 每次更新网络参考时手动修复,如上面的原始问题。

4

4 回答 4

2

这是 asmx Web 服务的一个“特性”。除了以下之一之外,没有其他方法可以解决它:

  • 使用更现代的网络服务类型。
  • 不要使用通用 DLL
  • 每次更新网络参考时手动修复,如上面的原始问题。

资料来源:其他stackoverflow问题:

于 2012-11-07T00:11:10.357 回答
1

没有办法做到这一点。

但是,我认为我们这里有一个设计问题。当我们创建一个 Web 服务时,我们希望我们的客户不需要从我们这里引用任何 dll。只有 Web 服务公开的类型才足以供其使用(Web 服务都是关于互操作性的,想象您的客户端应用程序是用 Java 编写的,您无法引用 .NET dll)。

这就是在您引用 Web 服务时创建这些类型的原因。在我看来,您应该只依赖客户端应用程序中的 Web 服务生成的类。从客户端项目中删除对共享 dll 的引用。

这不会直接回答您的问题,而是为您的问题提供替代方案。

于 2012-09-06T16:26:51.803 回答
1

我遇到了同样的问题,但我忽略了在我的客户端中使用请求/响应类型添加正确程序集的引用。一旦我添加了该引用,并确保“添加服务引用”对话框中的“重用类型”复选框处于打开状态,它就可以正常工作。

于 2012-09-12T16:52:35.930 回答
1

在域类中,设置 AnonymousType=false 以防止在添加 Web 引用时生成前缀意外的类
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = false )] 但这仅确保类,在 Reference.cs 中自动生成具有与领域类相同的结构。

解决这个问题的一种方法是序列化/反序列化到域对象。

于 2013-01-24T00:59:49.267 回答