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

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

我在 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/

相关文章:

visual-studio - 在 Visual Studio 中获取类源代码而不是元数据

c# - 使用 Visual Studio 创建 T-SQL 表单

c# - Visual Studio 2017 无法复制 dll,因为它正被 MSBuild.exe 进程使用

visual-studio - Visual Studio 2015 : No 64-bit command prompt

c# - 单元测试规则

c# - 运行 WPF 应用程序的可执行文件时 log4net 不工作

visual-studio - qmake 可以支持 Visual Studio 解决方案的文件夹层次结构吗?

visual-studio-2010 - 针对项目上下文构建的 VS 2010 解决方案配置

c# - .NET 在使用 XmlTextReader 找到特定的 XML 节点后对其进行编辑

c# - 允许数据库更改