Visual studio 如何设置代码生成任务的生成依赖项?

Visual studio 如何设置代码生成任务的生成依赖项?,visual-studio,msbuild,Visual Studio,Msbuild,我在同一个VisualStudio2019解决方案中有两个msbuild项目A和B。A取决于B B是一个可以生成代码的工具 A包含一个任务,用于运行代码生成并生成一个C#文件(Stuff.cs),作为A的一部分进行编译 我的目标是用最少的样板创建一个简单直观的增量构建。如果B源代码已更改或未找到生成的文件,则应触发重新运行代码生成任务,然后重新生成A。(否则不应重新运行代码生成) 问题是,当代码还没有生成时,它第一次起作用,但是在第二次更改B时,当重建A时,它绕过了代码生成步骤。它只是说A是

我在同一个VisualStudio2019解决方案中有两个msbuild项目A和B。A取决于B

  • B是一个可以生成代码的工具
  • A包含一个任务,用于运行代码生成并生成一个C#文件(Stuff.cs),作为A的一部分进行编译
我的目标是用最少的样板创建一个简单直观的增量构建。如果B源代码已更改或未找到生成的文件,则应触发重新运行代码生成任务,然后重新生成A。(否则不应重新运行代码生成)

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

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

  <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>

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


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

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

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

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

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


您确定
B.exe
有更新的修改日期吗?项目是否参考了B csproj?使用msbuild.exe生成时,增量生成是否有效,或者是来自VS的最新消息?(VS有一个启发式最新检查,可以避免调用MSBuild)a在生成依赖项列表中有B(不是引用),因此当我生成a时,会生成B项目,并更新B.exe,但a保持“最新”(根据VS的消息),并且任务不会重新运行。但它是否使用命令行中的MSBuild正确生成(开发人员命令提示符)?是否确定
B.exe
具有较新的修改日期?项目是否引用B csproj?使用msbuild.exe进行生成时,增量生成是否有效?还是来自VS的最新消息?(VS具有启发式最新检查,可避免调用msbuild)A在生成依赖项列表(不是引用)中有B,因此当我生成A时,B项目将生成,B.exe将更新,但A保持“最新”(根据VS的消息),并且任务不会重新运行。但是,它是否使用命令行(开发人员命令提示符)中的msbuild正确生成?这可以工作,谢谢。一个问题是B.exe现在在解决方案资源管理器中显示为“忽略”文件。有没有办法隐藏它?也许可以尝试添加
Visible=“false”
这可以工作,谢谢。一个问题是B.exe现在在解决方案资源管理器中显示为“忽略”文件。有没有办法隐藏它?也许可以尝试添加
Visible=“false”