【问题标题】:Generate C# classes from XML only if XML has changed仅当 XML 已更改时才从 XML 生成 C# 类
【发布时间】:2012-02-15 16:41:55
【问题描述】:

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

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

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

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    最后,我在我的 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 转义。

    现在 C# 源文件仅在 XML 发生更改时才会生成。我从this 论坛帖子中得到了方法。

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多