【问题标题】:Is there a way to resolve System namespace conflict in auto-generated from WSDL code?有没有办法解决从 WSDL 代码自动生成的系统命名空间冲突?
【发布时间】:2013-10-08 17:11:48
【问题描述】:

非常简单但相当令人沮丧。我(不幸的是,我无法更改它)我的项目中有一个库,它在MyCompany.System 命名空间中声明了它的类。在向我的其他库添加服务引用后,我在自动生成的代码中遇到数百个错误,因为 System.* .NET 命名空间都被解析为 MyCompany.System.* 命名空间。

通过编辑自动生成的代码并将global:: 添加到对System.* 的所有引用,可以轻松解决此问题。令人困惑的是,为什么一些自动生成的代码已经有了,而一些/大多数没有。我无法在 VS2012 中找到任何选项来强制 WSDL 自动附加 global::

如果有的话,我有什么选择?

【问题讨论】:

  • 当您添加 Web 服务引用时,VS2012 有时会要求生成代码的命名空间。在那里提供一个与现有名称不冲突的名称空间。
  • 它确实要求这样做,但随后 VS 使用默认命名空间作为后缀。换句话说,提供MyService 结果MyCompany.MyService。不过这是需要的 - 在项目的命名空间中生成代码非常好。

标签: c# wcf web-services wsdl


【解决方案1】:

一些想法,其中一个可能有效。 :)

在自动生成代码所在的项目中,首先编辑 Visual Studio 项目设置并将项目的默认命名空间更改为 MyCompany 以外的名称。这可能会阻止 System 被解释为 MyCompany.System。

尝试使用命名空间别名:

使用 MyCompanySystem = MyCompany.System;

【讨论】:

    【解决方案2】:

    您可以像这样使用外部别名: 在 MyCompany.System dll 的属性中将别名设置为 Msystem

    extern alias MSystem
    //using statements
    using MSystem.MyCompany.System
    

    关于外部别名的msdn:https://msdn.microsoft.com/pl-pl/library/ms173212.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      相关资源
      最近更新 更多