如何设置代码生成任务的构建依赖关系?

时间:2019-05-19 16:25:11

标签: visual-studio msbuild

我在同一Visual Studio 2019解决方案中有2个msbuild项目A和B. A取决于B。

  • B是可以生成代码的工具。
  • A包含一个任务,用于运行该代码生成并生成一个C#文件(Stuff.cs),以作为A的一部分进行编译。

我的目标是建立一个简单直观的增量构建,并减少样板。如果更改了B源代码或找不到生成的文件,则应触发代码生成任务重新运行,然后重新生成A。(否则,它不应重新运行代码生成)

问题在于,当尚未生成代码时,此方法第一次起作用,但是在B的第二次更改时,当重建A时,它绕过了代码生成步骤。它只是说A是“最新的”。

B是一个可执行文件,我用Exec在A的csproj中运行,如下所示:

  <Target Name="GenerateStuff" BeforeTargets="CoreCompile" 
    Inputs="$(SolutionDir)\B\bin\$(Configuration)\B.exe" 
    Outputs="$(ProjectDir)\Stuff.cs">
      <Exec Command="$(SolutionDir)\B\bin\$(Configuration)\B.exe" />
  </Target>

由于某种原因,它不将该“输入”视为有效触发器。

我也在寻找与此相关的更多文档和示例。

1 个答案:

答案 0 :(得分:2)

您应该将B.exe添加为项目系统的输入,以便在B.exe更改时Visual Studio最新检查会调用MSBuild-这是VS甚至在运行之前就运行的另一种启发式方法调用MSBuild。

<ItemGroup>
  <UpToDateCheckInput Include="$(SolutionDir)\B\bin\$(Configuration)\B.exe" />
</ItemGroup>