我在同一Visual Studio 2019解决方案中有2个msbuild项目A和B. A取决于B。
我的目标是建立一个简单直观的增量构建,并减少样板。如果更改了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>
由于某种原因,它不将该“输入”视为有效触发器。
我也在寻找与此相关的更多文档和示例。
答案 0 :(得分:2)
您应该将B.exe
添加为项目系统的输入,以便在B.exe
更改时Visual Studio最新检查会调用MSBuild-这是VS甚至在运行之前就运行的另一种启发式方法调用MSBuild。
<ItemGroup>
<UpToDateCheckInput Include="$(SolutionDir)\B\bin\$(Configuration)\B.exe" />
</ItemGroup>