在每次生成时在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时,即使目标是最新的,即使有空的预构建事件,目标也会重新构建。我希望我的预构建事件始终运行,可能会更改文件,并且只有在文件发生更改或项目尚未更新的情况下,才能重建目标。

事实证明没有问题,因为VS在目标(.dll(是最新的时不会真正重建它,但我对编译输出感到困惑:

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

即使生成的文件没有更改(上次修改日期相同(,也会始终显示此消息。

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

相关内容

最新更新