我正在从xsd架构文件中进行代码生成方面的一些研究。 我的要求:
(另请参阅我的其他问题:How can I generate multiple classes from xsd’s with common includes?和How can I generate comments from xs:documentation tags in a wsdl?
我找到了以下选项:
我有没有错过?因为(1),(2)和(5)不生成2.0代码,并且我在从(3)序列化代码时遇到问题。生成代码时你会用什么?
答案 0 :(得分:60)
我相信XSD2Code是目前可用的最佳工具(2011年)。
我最近在分析可用工具的过程中经历了相同的过程,所以我想我会提供与 VS2010 相关的更新答案。
我们的主要驱动因素是 xsd.exe 不会从XSD注释中生成XML文档,我们需要这些文档,因为我们有数百种类型定义。我尝试了上面列出的所有工具以及其他工具,大多数工具已弃用,未维护或无法匹配VS2010中可用的xsd.exe的当前功能。
然而,Xsd2Code 是一个极好的工具,似乎是积极维护的。它提供了上面列出的所有功能以及更多功能 - CodePlex页面还提供了各种选项如何影响输出的很好示例。
它还具有严格的VS集成,包括上下文菜单集成和自定义构建工具(这意味着如果您在项目中引用XSD并指定自定义工具,它将在您更新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
根据需要执行以下步骤以整理生成的代码:
希望能有所帮助。
答案 1 :(得分:8)
我还没有检查过,但Linq2XSD可能是一个有用的选择。
我打算给这个人一个机会。具有XSD生成的LINQ将优于您提到的任何这些工具 - 只要它运行良好。
答案 2 :(得分:3)
OpenSource项目XSD to Classes对我来说非常适合。
答案 3 :(得分:2)
我在一年多前的一个项目中使用了CodeXS。通过一些微小的调整(一个脚本可以清理生成的代码),它起到了一定的作用。
还有Dingo,它具有一些非常好的可扩展性功能(我们不需要)。
答案 4 :(得分:2)
尝试OxmLibrary - http://oxmlibrary.codeplex.com
答案 5 :(得分:0)
我发现的最好的XSD类生成器是 thinktecture WSCF.blue 。 它比其他大多数更好,原因有两个:
或者,如果您正在寻找T4解决方案,您可以尝试 XsdClassGen 。 这个不适合我。但好消息是它是一个T4文件,因此很容易修复!
答案 6 :(得分:-1)
Here is web based example使用XSLT将XML转换为C#代码。 该示例采用描述服务的模型(XML)(基本上是服务名称,名称空间和操作列表),然后在C#.net中生成WCF服务(接口,消息,错误,测试等)。