gpt4 book ai didi

c# - 在 Visual Studio 中,我可以让一个文件运行另一个文件的自定义工具吗? (在本例中使用 Xsd2Code)

转载 作者:太空狗 更新时间:2023-10-29 20:31:33 24 4
gpt4 key购买 nike

我正在尝试确定是否有可能在 Visual Studio 中使用自定义工具时更改一个文件的内容,从而触发另一个文件的自定义工具。

我的场景是这样的:

在 Visual Studio C# 项目中,我有一个“master.xsd”xml 架构,其中包含其他几个 xsd 文件。我正在使用 Xsd2Code用于从架构生成 .cs 的 Visual Studio 自定义工具。这在 master.xsd 本身发生变化时工作正常,但我希望自定义工具在其他 xsd 之一发生变化时在文件 master.xsd 上运行。

有没有办法让一个文件触发另一个文件的自定义工具?

[编辑 - 关于我为什么要为此使用自定义工具的更多详细信息]

目前我们有一个 GenerateFiles.bat 文件,它从命令行调用 Xsd2Code 以从模式生成代码字段(如下面的 MattDavey 所建议的)。这行得通,就是太慢了。

问题是,在每次构建时,Xsd2Code 都会运行,但由于许多其他项目都依赖于具有模式的该项目,因此即使可能没有任何更改,它们也会全部重新编译。实际结果是,即使对单元测试进行微小更改,也需要重新编译一半的项目。这就是为什么我们一直在研究自定义工具方法,以便仅在架构发生变化时生成代码文件。

最佳答案

我经常以这种方式使用 Xsd2Code,但我的方法是添加一个预构建事件,该事件调用 Xsd2Code 命令行并在每次构建时重新生成 xml。

我的预构建事件如下所示:

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs /platform Net40 /collection Array  /sc+ /ap+ /if- /xa+

在您的情况下,您可以仅在主 xsd 上运行此预构建步骤(我猜 xsd:Imports 其他模式),或者您可以分别在每个模式文件上运行该命令。

这样做的好处是,如果我更改 XSD 模式,我会得到非常有用的编译时错误:)

希望这能给你一些想法!

编辑

我花了一些时间思考您强调的关于构建时间的问题,并修改了预构建脚本,如下所示:

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs.temp /platform Net40 /collection Array  /sc+ /ap+ /if- /xa+

fc $(ProjectDir)Api\Schemas\MySchema.cs $(ProjectDir)Api\Schemas\MySchema.cs.temp

if errorlevel 1 copy $(ProjectDir)Api\Schemas\MySchema.cs.temp $(ProjectDir)Api\Schemas\MySchema.cs /Y

del $(ProjectDir)Api\Schemas\MySchema.cs.temp

所以 Xsd2Code 现在将源代码生成到一个临时文件中,如果它不同,它只会覆盖现有的 .cs 文件。这应该意味着如果 .xsd 根本没有改变,生成的 .cs 也不会:)

你仍然在运行 xsd2code,但如果生成的源是相同的,你就不会在 msbuild 中重建整个项目链。

关于c# - 在 Visual Studio 中,我可以让一个文件运行另一个文件的自定义工具吗? (在本例中使用 Xsd2Code),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9325165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com