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

时间:2012-02-15 16:41:56

标签: c# visual-studio msbuild pre-build-event

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

如果XML发生了变化,有没有办法只生成C#类?预建事件是错误的方法吗?使用某种自定义工具将XML转换为C#会更好吗?

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

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:3)

最后,我在我的csproj文件中添加了一个新的ItemGroup,并引用了每个XML文件。我给每个项目命名了Preprocess:

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

稍后在项目文件中我覆盖了BeforeBuild目标,因此它将每个Preprocess项转换为与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#源文件。我从this论坛帖子中得到了这个方法。