MSBuild在编译文件之前运行XSD任务

时间:2015-07-01 22:10:10

标签: c# xsd msbuild

我对MSBuild很新,我正在尝试运行XSD任务,以便每次运行构建时都会刷新运行我的应用程序所需的C#文件。

我的构建任务如下所示。

<UsingTask TaskName="XSD" AssemblyName="Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<Target Name="GenerateCSFromXSD" BeforeTargets="Build">
  <ItemGroup>
    <XSDInput Include="XML\File1.xsd"/>
    <XSDInput Include="XML\File2.xsd"/>
  </ItemGroup>

  <XSD GenerateFromSchema="classes" Language="CS" Sources="@(XSDInput)" />
</Target>

这很好用。每次运行构建时,它都会为File1和File 2输入重新生成一个新的C#文件。我的问题是,如果我从我的repo中删除File1和File2.cs文件并运行build,则构建将失败,因为由于某种原因,我的XSD任务正在进行的文件在查找源文件时不会生成编译。

我认为BeforeTargets="Build"会导致文件在执行任何其他操作之前生成。有任何想法吗?我还试过BeforeTargets="Compile"

1 个答案:

答案 0 :(得分:1)

有关如何挂钩代码生成逻辑的更多详细信息,请参阅https://mhut.ch/journal/2015/06/30/build_time_code_generation_msbuild

或者最简单的方法是在BeforeBuild目标中执行此操作,MSBuild在任何其他目标之前执行。