我在 C# 项目上有一个预构建事件,该项目运行 xsltproc 将一些 XML 转换为 C# 源文件。然后以正常方式构建生成的源。这意味着无论 XML 是否发生更改,项目始终都会构建。
有没有办法在 XML 发生更改时仅生成 C# 类?预构建事件是错误的方法吗?使用某种自定义工具将 XML 转换为 C# 会更好吗?
我使用的是 Visual Studio 2010。XML 不包含序列化对象。
非常感谢任何帮助。
最佳答案
最后,我在 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 得到了方法论坛帖子。
关于c# - 仅当 XML 发生更改时才从 XML 生成 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297402/