Visual Studio 2010: 在IDE中将XML XSD Schema转换为类

30
每当我需要从XML XSD模式创建类文件时,我会使用.NET xsd.exe工具和VS中的预建事件,以确保我的类和模式在构建时彼此同步。这当然很有效,但是...
我注意到如果XSD和派生类位于同一个项目中,VS会理解它们之间的关系,并在解决方案资源管理器中将CS视觉上显示为XSD文件的子级。所以我想知道在Visual Studio 2010中是否有任何功能可以在IDE内执行类创建而不是依赖于预建脚本?
例如,我会将XSD添加到项目中,在某个地方设置一些选项,然后VS接管并为我创建类。
VS 2010是否支持这样的功能?还是我应该停止猜测并继续使用xsd.exe和预建脚本。
编辑 我还注意到在XSD文件的属性下,我有一个设置“Custom Tool”的选项,阅读描述似乎接近我想要的内容,但是我不确定该属性的正确使用方法。
编辑 此外,如果有解决方案,我需要基于VS2010标准提供的功能/函数。我更愿意不使用第三方插件等。

1
在VS2012中,您可以将xsd文件添加到项目中,它会自动生成类。 - msmucker0527
3个回答

57
您可以使用位于 C:\program files\Microsoft\SDKs\Windows\v7.0A\Bin\xsd.exe 的 XSD.exe。按照以下步骤将XSD添加为VS工具菜单项:
  1. 将XSD文件添加到您的VS项目中
  2. 进入Visual Studio工具菜单
  3. 转到外部工具
  4. 添加
  5. 将标题输入为XSD
  6. 将命令输入为系统中XSD的路径(通常是 C:\program files\Microsoft SDKs\Windows\v7.0A\Bin\xsd.exe
  7. 将参数输入为$(ItemPath) /c /l:cs
  8. 将初始目录输入为$(ItemDir)
  9. 勾选“使用输出窗口”
  10. 点击“确定”
然后在解决方案资源管理器中单击Xsd文件,然后选择工具--Xsd,这将在与.XSD文件相同的文件夹中生成类。如果您在第1步中尚未添加该文件,则需要通过右键单击解决方案资源管理器中的项目,选择"添加" --> "现有项",然后应存在从.XSD生成的.CS文件,并可以包含在内。

你的答案中断了...“相同的f”,剩下的部分是什么? - Peter Elliott
3
谢谢,但为了设置生成类的命名空间,我不得不做一个小修改。在参数末尾添加 /n:"命名空间" 并点击 "提示输入参数"。当出现提示时,您只需将“命名空间”更改为您自己的命名空间即可。我最初尝试使用默认的命名空间,但是找不到任何方法来实现这一点。如果有人知道更好的方法,请告诉我。谢谢。 - nfplee
1
太棒了。以前不知道那个外部工具选项是干什么的。有这么多新活动。 - Ryan Bennett
1
我添加了以下参数,以便我可以通过在编辑器中选择一些文本来指定生成代码的命名空间:/n:$(CurText) - Ronnie Overby
3
我在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin找到了xsd.exe。 - mattumotu

13

Visual Studio 2010本身不包含任何供广泛使用的功能。

在ADO.NET中,Visual Studio对于这种XSD到代码转换有一些有限的支持 - 但它们不是通用解决方案,而是针对特定的用法场景。

一定要查看XSD2Code插件,它可以完美实现此功能。

输入图像描述


我很想避免使用第三方插件,如果插件必须安装在使用该解决方案的每台机器上。对于Xsd2Code,是否有可能仅在一台机器上安装插件? - MrEyes
1
@MrEyes:你只需要在负责从XSD转换为C#的机器上安装插件——其他程序员只需使用生成的C#即可,无需在每台机器上都安装插件...正如我所说:Visual Studio中没有任何通用工具可以完成此操作——因此只能使用插件或什么都不用。 - marc_s
我安装了Xsd2Code 3.4版本,但在我的解决方案中右键单击xsd文件时没有看到“运行Xsd2Code生成”菜单选项。我还检查了一下在我安装的VS2008中是否有效,但没有成功。然后我安装了3.4版本并尝试了beta版本。出了什么问题?我做错了什么吗? - Chad

3

在 Visual Studio 中曾经有一种方法可以实现这个功能。您可以右键单击 XML 模式,并在上下文菜单中选择“生成数据集”之类的选项。我以前经常使用它,效果非常好。由于某些神秘的原因,微软删除了该功能-可能是在 VS 2003 之后?我不确定为什么使用命令行工具是可以的,而从菜单执行相同的代码却不可以,但事实就是如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接