【问题标题】:How to generate .NET classes with comments from WSDL and XSD如何使用来自 WSDL 和 XSD 的注释生成 .NET 类
【发布时间】:2012-01-26 21:42:07
【问题描述】:

有一些 XSD 和 WSDL。我想从它们生成 C# 代码。我使用了 svcutil.exe,但它不会从 XSD 注释生成 XML-cmets:

<annotation>
    <documentation>VERY USEFULL DOCUMENTATION</documentation>
</annotation>

我想要这个在生成的文件中:

public class SomeData
{
    /// <summary>
    /// VERY USEFULL DOCUMENTATION
    /// </summary>
    public string SomeField
    {...}
}

另一个问题:如何强制 svcutil.exe 为每个类生成一个文件? (我知道我可以使用 Resharper 的重构将类移动到单独的文件中,但我不喜欢这种解决方案)

那么如何使用 XML-cmets 从 XSD 和 WSDL 生成多个文件(每个类一个文件)

【问题讨论】:

  • 您的问题包含答案。该工具无法满足您的需求。
  • 为什么要将它们放在单独的文件中?这些类型是由工具生成的,您不需要更改它们。它们是在一个文件中还是在十几个文件中都没有关系——你不应该关心哪个文件里面有什么。
  • 约翰,我想这样做是因为我们的代码政策 :)
  • 此类政策不应应用于生成的代码。例如,您的策略是否适用于 Windows 窗体 .Designer.cs 文件?如果一个工具生成文件,并且如果它们不被人类阅读,那么大多数策略不应该适用于它们。您的命名约定策略是否适用?如果一个字段名为“javaStyleName”,是否需要将其重命名为“JavaStyleName”?
  • 此代码将用于我们的需要。第一步,它是从一些标准的定义中生成的。我们以此标准为起点构建自己的基础设施。因此,在生成此代码时,它将用作正常的人工编辑代码。

标签: wcf xsd annotations wsdl comments


【解决方案1】:

您也许可以使用 WCFExtras+ http://wcfextrasplus.codeplex.com/

  1. 使 WCFExtras.dll 对 svcutil.exe 可见(例如将它们放在同一目录中)
  2. 将此部分添加到客户端应用程序的 app.config 中,或放入新的配置文件并使用 /svcutilConfig 开关调用 svcutil

     <configuration>
      <system.serviceModel>
        <client>
          <metadata>
            <wsdlImporters>
              <extension type="WCFExtras.Wsdl.Documentation.XmlCommentsImporter, WCFExtras" />
            </wsdlImporters>
          </metadata>
        </client>
      </system.serviceModel>
    </configuration>
    

示例命令行,其中 configfile.xml 是上面的配置文件: SvcUtil.exe [服务 url] /svcutilConfig:[configfile.xml 的路径]

【讨论】:

  • 对于未来的读者:WCFExtras 命名空间已更改为 WFCExtrasPlus,其程序集名称也是如此。如果您使用的是完全限定名称,请确保使用正确的版本和公钥令牌,您可以从库文档页面中的 cmets(或程序集本身)中找到这些令牌。主要文档已经很久没有更新了,现在将过时的版本号称为公钥令牌
  • 不适合我。 svcutil 抛出Error: An error occurred in the tool. Error: Object reference not set to an instance of an object.
【解决方案2】:

我刚刚了解了 xsd2Code Visual Studio 插件。将 Xsd 注释/文档文本移到 c# xml 文档摘要标记中,它完全符合您的要求。

CodePlex 上有一个社区版本。 paid version 有一些其他不错的高级功能,所以我决定支付 45 美元购买一年的许可证。注意:我不是公司的一员,只是一个满意的客户。

斯科特·克劳德

【讨论】:

  • xsd2Code 很好。我也有付费版。它有两个主要缺点:它只支持模式(没有 wsdl/contract);一些可为空的 xml 属性(即十进制)无法通过代码生成正确处理,因此您必须手动对其进行编码。
【解决方案3】:

答案的基本部分是(目前)没有办法制作标准工具,例如 wsdl.exe 或 svcutil.exe(随 Windows SDK 提供)。您需要一个单独的工具来预处理生成的代理文件。

除了其他答案中的工具外,如果您的服务定义具有 annotation/documentation 元素,FancyWsdl 也可以在您的 C# 代码中创建适当的摘要标记:

FancyWsdl 对 wsdl.exesvcutil.exeVisual Studio > 添加服务参考等工具生成的 WSDL 服务定义的 C# 代理代码进行后处理,并引入了以下增强功能:

  • 可以重命名类型和成员
  • 应用 C# 命名约定 (PascalCase)
  • 插入文档(摘要标签)
  • 清理代码
  1. 从 WSDL 文件生成 C# 代理类,例如
    • wsdl.exe https://example.com/ExampleService/?wsdl
    • svcutil.exe https://example.com/ExampleService/?wsdl
    • Visual Studio > 添加服务参考
  2. 在生成的代码上运行FancyWsdl传递服务定义
    例如fancywsdl.exe ExampleService.cs https://example.com/ExampleService/?wsdl https://example.com/ExampleData.xsd

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2011-12-30
    • 1970-01-01
    • 2011-01-18
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多