XSD代码生成器比较

我正在做一些从xsd模式文件生成代码的研究。 我的要求:

  • 必须生成C#2.0代码(或以上),在需要的地方使用generics集合。
  • 必须从xsd评论中生成评论
  • 必须生成完全可序列化的代码。
  • 应该能够生成可重用的基本types时,从多个xsd产生相同的包括。

(另请参阅我的其他问题: 如何从xsd生成多个类,并使用common include?以及如何从wsdl中的xs:documentation标记生成注释?

我find了以下选项:

  1. 使用xsd.exe(随SDK和Visual Studio提供)
  2. 来自Daniel Cazzulino的 XSDCodeGen
  3. Xsd2Code
  4. CodeXS
  5. 由Microsoft的XsdObjectGen
  6. XSDClassGen (似乎失踪的行动)

我错过了吗? 由于(1),(2)和(5)不生成2.0代码,并且在序列化来自(3)的代码方面存在问题。 生成代码时使用什么?

我相信XSD2Code是目前可用的最佳工具(2011年)。

我最近在分析可用工具的工作中经历了同样的过程,所以我想我会提供一个与VS2010相关的更新的答案。

我们的主要驱动程序是xsd.exe不会从XSD注释生成XML文档,我们需要这些注释,因为我们有数百个types定义。 我尝试了上面列出的所有工具以及其他工具,大多数都被弃用,无法维护或无法匹配VS2010中提供的xsd.exe的当前function。

然而, Xsd2Code是一个很好的工具,似乎是积极维护。 它提供了上面列出的所有function以及更多 – CodePlex页面也提供了各种选项如何影响输出的很好的例子。

它也具有严密的VS集成,包括上下文菜单集成和自定义构build工具(这意味着如果您在项目中引用XSD并指定自定义工具,则会在更新XSD时自动更新代码)。 总而言之,我们节省了大量的工作。

我对其他工具的简要总结:

  • Dingo – 看起来更像Java
  • XSDCodeGen – 更多关于如何编写自定义构build工具的演示
  • CodeXS – 相当好的工具,但集成度较低,function不再维护
  • XSDObjectGen – 不再维护,function比当前的xsd.exeless
  • XSDClassGen – 找不到它
  • OXM库 – 推荐看这个项目,维护和伟大的function
  • LINQ to XSD – 非常酷的项目,但不是我所期待的

附录:如果您决定继续使用XSD2Code,那么我发现使用命令行工具会遇到一些问题。 特别是,有一些错误的参数处理,需要一些参数是在一定的顺序以及一些未公开的依赖(例如 – 自动参数和.NET版本是订单的具体和相关的)。 以下是我使用XSD2Code生成代码然后清理输出的步骤 – 根据需要采取适用于您的位:

运行以下batch file以生成初始代码,将path更改为正确的位置:

@echo off set XsdPath=C:\schemas set OutPath=%XsdPath%\Code set ExePath=C:\Progra~1\Xsd2Code set Namespace=InsertNamespaceHere echo.Starting processing XSD files ... for /f %%a IN ('dir %XsdPath%\*.xsd /ad /b /s') do call:ProcessXsd %%a echo.Finished processing XSD files ... echo.&pause& goto:eof :ProcessXsd %ExePath%\Xsd2Code %~1 %Namespace% %XsdPath%\Code\%~n1%.cs /pl Net35 /if- /dc /sc /eit echo.Processed %~n1 goto:eof 

根据需要执行以下步骤整理生成的代码:

  1. 正则expression式replace – 当前项目,大小写,整个单词 – [System.Runtime.Serialization.DataContractAttribute(名称:b * =:b *:q,:b 命名空间:b =:b * {:q})]]与[DataContract Namespace = \ 1)]
  2. replace – 当前项目,大小写,整个单词 – [System.Runtime.Serialization.DataMemberAttribute()][DataMember]
  3. 正则expression式replace – 当前项目,案例,整个单词 – System.Nullable \ <{:w}>\ 1 \?
  4. 正则expression式replace – 用\ 1打开文档,大小写,整个单词 – {:w} TYPE
  5. replace – 打开文档,大小写,整个单词 – 与DateTime的 System.DateTime ,然后添加缺less使用语句
  6. replace – 打开文档,大小写,整个单词 – [System.Xml.Serialization.XmlIgnoreAttribute()][XmlIgnore]
  7. XmlArrayreplace – 当前项目 – System.Xml.Serialization.XmlArrayAttribute
  8. replace – 当前项目 – System.Xml.Serialization.XmlArrayItemAttributeXmlArrayItem
  9. 正则expression式replace – 当前项目 – ,[:Wh] + /// \ <备注/ \>

希望能帮助别人。

我还没有检查出来,但Linq2XSD可能是一个有用的select。

我打算给这个一个镜头。 使用XSD生成LINQ将比你提到的任何工具都更好 – 只要它能很好地工作。

OpenSource项目的XSD到Classes对我来说非常合适。

我一年前的一个项目,我们使用CodeXS。 通过一些小的调整(一个脚本来清理生成的代码),它的魅力。

还有Dingo ,它有一些非常好的扩展性(我们不需要)。

试试OxmLibrary – http://oxmlibrary.codeplex.com

我发现的最好的XSD类生成器是思想WSCF.blue 。 比其他大多数人更好,原因有二:

  1. 修复命名。 这意味着包装和types和属性名称的plurization。
  2. 为每个类创build一个单独的文件。

或者,如果您正在寻找T4解决scheme,则可以尝试XsdClassGen 。 这个不适合我 但好消息是这是一个T4文件,所以很容易修复!

以下是使用XSLT将XML转换为C#代码的基于Web的示例 。 该示例使用描述服务(基本上是服务名称,名称空间和操作列表)的模型(XML),然后使用C#.net生成WCF服务(接口,消息,错误,testing等)。