SVCUTIL.EXE:有什么方法可以分离我的 Commons.xsd 类吗? (C#)

发布于 2024-10-25 12:20:28 字数 681 浏览 1 评论 0原文

基本上我有以下场景:

我有 2 个 WSDL 文件:

  • User.wsdl
  • Customer.wsdl

这两个 wsdl 都引用 Commons.xsd (架构),以便它们可以使用 Address ComplexType。

然后我执行 svcutil.exe "User.wsdl" "Commons.xsd" 来生成 User wsdl 的代码。
然后,我执行 svcutil.exe "Customer.wsdl" "Commons.xsd" 来生成 Customer wsdl 的代码。

问题是这样的:如何让 svcutil 将 Address 放入它自己的“Commons”命名空间中?就目前而言,它在两个输出文件(User.csCustomer.cs)中创建一个 Address 类型,这会导致名称冲突,或者如果我指定现在我有两个地址类型,每个类型都在自己的命名空间中,这意味着我无法在用户和客户之间传递相同的地址引用(有时用户也是客户,因此他们具有相同的地址)。

有没有某种方法可以使 svcutil 将地址拆分到自己的命名空间中?而且,如果它可以将其放入自己的文件 (Common.cs) 中,那也会很不错。但是,我看不出有什么办法可以做到这一点。

Basically I have the following scenario:

I have 2 WSDL files:

  • User.wsdl
  • Customer.wsdl

Both of these wsdl's reference a Commons.xsd (Schema) so that they can use an Address ComplexType.

Then I do svcutil.exe "User.wsdl" "Commons.xsd" to generate the code for the User wsdl.
Then I do svcutil.exe "Customer.wsdl" "Commons.xsd" to generate the code for the Customer wsdl.

The problem is this: How do I get svcutil to put Address in it's own "Commons" namespace? As it stands right now, it creates an Address type in both of the output files (User.cs and Customer.cs) which cause a name collision, or if I specify a namespace now I have two Address types, each in their own namespace, which means I can't pass around the same reference between User and Customer for address (sometimes a user is also a customer, so they have identical addresses).

Is there some way of making svcutil split out the Address into its own namespace? And also, if it can put it in it's own file (Common.cs) that would rock too. But, I don't see a way for it to do so.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拿命拼未来 2024-11-01 12:20:28

svcutil 有一个 /namespace 参数,允许您将 wsdl 命名空间映射到给定的代码命名空间。您可以多次提供此参数,但它没有很好的记录,因此您可能需要大量使用它...您可以指定一个通配符,但我不确定您是否可以单独列出一个名称空间和通配符其余的部分。

我对此不确定,但我认为如果您同时执行两个 wsdl,我认为它们将合并成一个 .cs 文件......也许它会足够聪明,不会在那时重复类。

例如。

svcutil.exe "User.wsdl" "Customer.wsdl" "Commons.xsd"  
/n:UserAddressNamespace,User.Address  
/n:*,User

希望这对您有所帮助,我希望能给您一个更好的答案,但是我已经很长时间没有使用 wsdl 了。

svcutil has a /namespace argument that allows you to map wsdl namespaces to a given code namespace. You can provide this argument multiple times, but it's not well documented, so you may need to play around with it quite a bit... you can specify a wildcard, but I'm not sure if you can single out one namespace and wildcard the rest.

I'm not sure about this, but I think that if you do both wsdl's at the same time, I think they will combine into one .cs file... maybe it will be smart enough to not duplicate classes at that point.

For eg.

svcutil.exe "User.wsdl" "Customer.wsdl" "Commons.xsd"  
/n:UserAddressNamespace,User.Address  
/n:*,User

Hopefully that helpssome, I wish I could give you a better answer, but it's been a long time since I used wsdl's.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文