在构建期间自动化 xsd.exe

Posted

技术标签:

【中文标题】在构建期间自动化 xsd.exe【英文标题】:Automate xsd.exe during build 【发布时间】:2013-01-31 14:35:33 【问题描述】:

我需要一种在构建过程中根据 *.xsd 文件自动重新生成 *.cs 文件的方法,最好不涉及任何自定义加载项。这也需要在 CI 构建上运行。

我不确定我是否遗漏了一些明显的东西,或者在我看来这真的很棘手吗?

【问题讨论】:

预构建事件应该适用于此。 【参考方案1】:

我使用这个脚本:

@echo off
cd %1
call :treeProcess %2 "XSDs"
cd ..
goto :eof

:treeProcess
rem From http://***.com/a/8398621/298754
echo Processing %2
for %%f in (*.xsd) do call :buildXSD %%f %1 %2 %%~nf
for /D %%d in (*) do (
    cd %%d
    call :treeProcess %1 %2.%%d
    cd ..
)
exit /b

:buildXSD
%2 %1 /c /n:%3.%4%

带有预构建事件

call "$(ProjectDir)"XSDBuilder.bat "$(ProjectDir)"\XSDs "$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\@InstallationFolder)bin\xsd.exe"

这将递归解析项目根目录中名为 XSDs 的文件夹中的每个 .xsd 文件,并根据文件夹结构分配命名空间。

【讨论】:

谢谢,这对我有用!有时最明显的答案是最难找到的。 @MarcinSeredynski - 绝对正确。我很高兴它有帮助! 要设置您自己的命名空间,您可以将第三行的“XSDs”字符串文字替换为您的命名空间或 %3,以便能够将第三个参数中的命名空间传递给此批处理文件 为了 x64 兼容性,请使用此字符串而不是第二个参数并检查您机器上安装的 SDK 版本 "$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7 .1', 'InstallationFolder', null, RegistryView.Registry64, RegistryView.Registry32))bin\xsd.exe" 如果您正在查看生成 XSD 的 XML 中的更改,请注意您必须第一次生成 XSD,然后再查找 XSD。否则,您将为一大堆不值得的 XML 文档生成 CS 文件。

以上是关于在构建期间自动化 xsd.exe的主要内容,如果未能解决你的问题,请参考以下文章

XSD.exe 自动在关联属性的 setter 中设置生成的指定字段

如何将模型(从 xsd.exe 构建)序列化为 XmlDocument?

XSD.exe 和“循环组引用”

xsd.exe 在 OFX2 架构上运行时生成重复的属性

从 Visual Studio 中的类生成 XSD

使用 XSD.exe 的多个版本 C# 类/XSD