【问题标题】:Prevent generation of proxy classes in Reference.cs when adding/updating a web reference添加/更新 Web 引用时,防止在 Reference.cs 中生成代理类
【发布时间】:2012-08-11 01:59:21
【问题描述】:

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

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

【问题讨论】:

标签: asp.net web-services visual-studio asmx


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    没有办法做到这一点。

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

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

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

    【讨论】:

    • 投反对票的人,请为您的投票提供解释。谢谢。
    • 我的猜测是因为它没有回答问题。尽管“我应该用旧鞋还是玻璃瓶敲打这个”。
    • 是的,@stannius,也许这就是原因。我稍微改变了我的答案,所以“锤鞋”的人不能抱怨它。顺便说一句,我希望我的回答在某种程度上对你有所帮助。
    【解决方案3】:

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

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

    来源:其他 stackoverflow 问题:

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 2018-04-20
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        • 2016-12-13
        相关资源
        最近更新 更多