首页 > 解决方案 > 在每次构建时在 Visual Studio C# 中运行预构建事件,而不总是触发目标重新构建

问题描述

我需要的

我有一个 .exe,它可能会或可能不会更新 VS C# 项目中的一个 .cs 文件。
我想在每次构建之前运行这个 .exe(我正在尝试预构建事件),即使项目是最新的。

到目前为止我所知道的:

更改磁盘上的项目文件时,在下一次构建之前不会考虑更改,因为 VS 将文件缓存在 RAM 中。下面的代码应该通过始终从磁盘读取文件来防止这种情况发生(代码应添加到 .csproj 文件中的第一个 PropertyGroup)

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>

为了在每个构建上触发预构建事件,您可以像这样禁用 FastUpToDateCheck:

<PropertyGroup>
    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>

问题

当我执行DisableFastUpToDateCheck true时,即使目标是最新的,即使是空的预构建事件,也会重新构建目标。我希望我的预构建事件始终运行,可能会更改文件,并且只有在文件发生更改或者项目已经不是最新的情况下,才能重新构建目标。

标签: c#visual-studiomsbuildvisual-studio-2019

解决方案


事实证明没有问题,因为 VS 在更新时实际上不会重建目标(.dll),但我对编译输出感到困惑:

项目 -> long/path/to.dll
========== 构建:1 成功,0 失败,2 最新,0 跳过 ==========

即使未更改生成的文件(上次修改日期相同),此消息也会始终出现。

另一个重要的注意事项是,在构建一个不是启动项目的项目时(我们称它们为 myproject 和 mystartup),myproject 的输出将根据需要写入 myproject/bin,但只有在您创建时才会复制到 mystartup/bin运行启动项目(或重建)。


推荐阅读