仅当XML发生更改时,才从XML生成C#类

本文关键字:XML 才从 生成 仅当 | 更新日期: 2023-09-27 18:24:56

我在一个C#项目上有一个预构建事件,它运行xsltproc将一些XML转换为C#源文件。然后以正常方式构建生成的源代码。这意味着,无论XML是否发生了更改,项目都会得到构建。

有没有一种方法可以在XML发生变化的情况下只生成C#类?预构建事件是错误的方法吗?使用某种自定义工具将XML转换为C#会更好吗?

我正在使用Visual Studio 2010。XML不包含序列化对象。

非常感谢您的帮助。

仅当XML发生更改时,才从XML生成C#类

最后,我在csproj文件中添加了一个新的ItemGroup,并引用了每个XML文件。我给每个项目一个预处理的元素名称:

<ItemGroup>
  <Preprocess Include="Xml'MySourceXmlFile1" />
  <Preprocess Include="Xml'MySourceXmlFile2.xml" />
</ItemGroup>

在项目文件的后面,我覆盖了BeforeBuild目标,以便它将每个预处理项转换为与XML文件同名的C#源文件:

<Target Name="BeforeBuild"
  Inputs="@(Preprocess)"
  Outputs="@(Preprocess->'$(ProjectDir)%(Filename).cs')">
  <Exec Command="xsltproc -o %22$(ProjectDir)%(Filename).cs%22 %22MyTransform.xsl%22 @(Preprocess)" />
</Target>

请注意,xsltproc的参数必须用%22进行转义。

现在,只有当XML发生更改时,才会生成C#源文件。我从这个论坛帖子中得到了这个方法。