当前位置:  开发笔记 > 编程语言 > 正文

XSD代码生成器的比较

如何解决《XSD代码生成器的比较》经验,为你挑选了2个好方法。

我正在从xsd模式文件中进行代码生成方面的一些研究.我的要求:

必须使用通用集合生成C#2.0代码(或更高版本).

必须从xsd注释生成注释

必须生成完全可序列化的代码.

当从具有相同包含的多个xsd生成时,应该能够生成可恢复的基本类型.

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

我找到了以下选项:

    使用xsd.exe(随SDK和Visual Studio提供)

    来自Daniel Cazzulino的 XSDCodeGen

    Xsd2Code

    CodeXS

    XsdObjectGen由Microsoft提供

    XSDClassGen(似乎在行动中缺失)

我错过了吗?因为(1),(2)和(5)不生成2.0代码,并且我在从(3)序列化代码时遇到问题.生成代码时你会用什么?



1> Xcalibur..:

我相信XSD2Code是目前最好的工具(2011年).

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

我们的主要驱动因素是xsd.exe不会从XSD注释中生成XML文档,我们需要这些文档,因为我们有数百种类型定义.我尝试了上面列出的所有工具以及其他工具,大多数工具已弃用,未维护或无法匹配VS2010中可用的xsd.exe的当前功能.

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

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

我看到的其他工具的快速摘要:

Dingo - 似乎更符合Java

XSDCodeGen - 更多关于如何编写自定义构建工具的演示

CodeXS - 相当不错的工具,但集成度较低,功能较少,不再维护

XSDObjectGen - 不再维护,功能少于当前的xsd.exe

XSDClassGen - 找不到它

OXM库 - 推荐查看此项目,维护和功能强大

LINQ to XSD - 非常酷的项目,但不是我想要的

附录: 如果您决定继续使用XSD2Code,我发现使用命令行工具时会遇到许多问题.特别是,参数处理存在一些错误,这些错误需要一些参数以某种顺序以及一些未记录的依赖项(例如 - 自动参数和.NET版本是特定于顺序且依赖的).以下是我用于使用XSD2Code生成代码然后清理输出的步骤 - 根据需要获取适用于您的位:

运行以下批处理文件以生成初始代码,将路径更改为正确的位置:

@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 /a-d /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

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

    正则表达式替换 - 当前项目,大小写,整个单词 - [System.Runtime.Serialization.DataContractAttribute(Name:b*=:b*:q,:b 命名空间:b =:b*{:q})]和[DataContract(命名空间=\1)]

    替换 - 当前项目,案例,整个单词 - [System.Runtime.Serialization.DataMemberAttribute()][DataMember]

    正则表达式替换 - 当前项目,大小写,整个单词 - System.Nullable\<{:w}>\ 1 \?

    正则表达式替换 - 打开文档,大小写,整个单词 - {:w} TYPE with \ 1

    替换 - 打开文档,大小写,整个单词 - 使用DateTime的System.DateTime,然后添加缺少的using语句

    替换 - 使用[XmlIgnore]打开文档,大小写,整个单词 - [System.Xml.Serialization.XmlIgnoreAttribute()]

    替换 - 当前项目 - 带有XmlArray的System.Xml.Serialization.XmlArrayAttribute

    替换 - 当前项目 - 带有XmlArrayItem的System.Xml.Serialization.XmlArrayItemAttribute

    正则表达式替换 - 当前项目 - ,[:Wh] + ///\,

希望能帮助别人.


XSD2Code不适用于Visual Studio 2012.
我不得不同意Xsd2Code目前是冠军.如果您已手动或通过GPO移动了默认的"文档"位置,请注意加载项未正确加载.解决方案是从安装位置获取加载项文件并将其放在Documents\Visual Studio 2010\Addins \文件夹中.
由`Schalk Versteeg`添加为编辑:`XSDtoClasses` https://code.google.com/p/xsd-to-classes/ - `Extendable VS插件,与XSD2Code的功能非常相似.

2> Simon_Weaver..:

我还没有检查过,但Linq2XSD可能是一个有用的选择.

我打算给这个人一个机会.使用XSD生成的LINQ将优于您提到的任何这些工具 - 只要它工作得很好.


不要太担心它是一个"死项目".如果它非常完整和正常工作,那么它不会"死" - 它的工作!到目前为止我似乎还好
我已经用了几年了.与其他实体技术相比,它具有一些巨大的优势,我认为MS放弃它是一种真正的耻辱
我目前正在一个活跃的项目中成功使用Linq到Xsd.它似乎是我发现的最完整的'xsd to class mapper'.我尝试使用Xsd2Code,但它没有很好地映射xsd的复杂类型 - 我有一个xs:pattern限制,它在Linq到Xsd中完美映射,但在Xsd2Code中缺失.热门提示 - 将Linq的源代码下载到Xsd - 它有一大堆文档和示例项目未列在codeplex的"文档"选项卡中 - [下载此处](http://linqtoxsd.codeplex.com/ SourceControl /表/变更)
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有