基本上我有以下场景:
我有 2 个 WSDL 文件:
- 用户.wsdl
- 客户.wsdl
这两个 wsdl 都引用了 Commons.xsd(架构),因此它们可以使用地址 ComplexType。
然后我执行 svcutil.exe "User.wsdl""Commons.xsd"
为用户 wsdl 生成代码。
然后我执行 svcutil.exe "Customer.wsdl""Commons.xsd"
生成客户 wsdl 的代码。
问题是这样的:如何让 svcutil 将 Address 放入它自己的“Commons”命名空间中?就目前而言,它会在两个输出文件(User.cs
和 Customer.cs
)中创建一个 Address 类型,这会导致名称冲突,或者如果我指定一个命名空间现在我有两个地址类型,每个都在它们自己的命名空间中,这意味着我不能在用户和客户之间传递相同的地址引用(有时用户也是客户,所以他们有相同的地址)。
有没有办法让 svcutil 将地址拆分到它自己的命名空间中?而且,如果它可以将其放入自己的文件 (Common.cs
) 中,那也会很不错。但是,我看不到这样做的方法。
最佳答案
svcutil 有一个/namespace 参数,允许您将 wsdl 命名空间映射到给定的代码命名空间。你可以多次提供这个参数,但它没有很好的文档记录,所以你可能需要花很多时间来玩弄它......你可以指定一个通配符,但我不确定你是否可以挑出一个命名空间和通配符剩下的。
我对此不确定,但我认为如果您同时执行两个 wsdl,我认为它们将合并到一个 .cs 文件中......也许它足够聪明,不会在那个时候重复类点。
例如。
svcutil.exe "User.wsdl" "Customer.wsdl" "Commons.xsd"
/n:UserAddressNamespace,User.Address
/n:*,User
希望对您有所帮助,我希望我能给您一个更好的答案,但是我已经有很长时间没有使用 wsdl 了。
关于c# - SVCUTIL.EXE:有什么方法可以分离我的 Commons.xsd 类? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422435/