c# - 在每次构建时在 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运行启动项目(或重建)。
推荐阅读
- amazon-web-services - AWS - 在飞行中创建卷并将其附加到容器
- java - 尝试使用作业运算符停止弹簧批处理时的问题
- linux - fw_printenv 不显示来自 uboot.env 的环境变量
- sql-server - 需要一个查询(一个存储过程)将数据从 2 个表插入到多 (3) 个表中
- c# - Epplus 5.6:导出 ToDataTable 时如何忽略一行
- android - 如何从 SQLite 检索数据并将其添加到其他活动中的 edittext
- flutter - 在颤振中实现动画项目
- c++ - C++:如何在没有模板参数的情况下访问模板类的静态成员
- drupal - 在 Drupal 9 中以编程方式获取字段翻译的默认值
- reactjs - React Reload 即时消息传递