如果 Visual Studio 项目的设置取决于更改的环境变量,则不会自动重建 Visual Studio 项目

Posted

技术标签:

【中文标题】如果 Visual Studio 项目的设置取决于更改的环境变量,则不会自动重建 Visual Studio 项目【英文标题】:Visual Studio project is not rebuilt automatically if it's settings depend on the environment variable which is changed 【发布时间】:2021-06-03 07:59:45 【问题描述】:

我在 Visual Studio 16.8.3 (Enterprise 2019) 中有一个解决方案。解决方案项目的设置取决于环境变量OPTIMIZE 的值。类似于以下内容(其他设置省略):

<ItemDefinitionGroup Condition="'$(OPTIMIZE)' == 'TRUE'">
  <ClCompile>
    <WholeProgramOptimization>true</WholeProgramOptimization>
  </ClCompile>
</ItemDefinitionGroup>
...
<ItemDefinitionGroup Condition="'$(OPTIMIZE)' != 'TRUE'">
  <ClCompile>
    <WholeProgramOptimization>false</WholeProgramOptimization>
  </ClCompile>
</ItemDefinitionGroup> 

我设置OPTMIZE=TRUE 并构建解决方案。然后我关闭VS,设置OPTIMIZE=FALSE,打开VS。现在我期待整个解决方案将被重建,因为每个 cpp 的文件编译设置都发生了变化。但是当我按下Build Solution 时,什么也没有发生。当我在解决方案资源管理器中右键单击该项目并按Build 时,再次没有任何反应。

但是,当我在任何项目中选择任何 cpp 文件并对其进行编译时,该项目会以某种方式理解其所有 cpp 文件的设置都已更改。现在,如果我在解决方案资源管理器中右键单击该项目,然后按Build,整个项目将被重建。

我希望项目了解当我更改环境变量的值时设置已更改。我怎样才能实现这种行为?

附:当然,如果我知道设置已更改,我可以使用Rebuild Solution。但我不想记住 OPTIMIZE 变量的值自上次构建以来是否发生了变化。我只想按Build Solution 并在没有更改的情况下进行小增量构建,如果设置发生更改则进行完整的重建。

【问题讨论】:

【参考方案1】:

VS IDE 无法检测到我身边的微小变化,我遇到了与您描述的相同的行为。在我看来,msbuild 会检测你的资源文件与输出文件相比的更改或修改,然后如果输出文件较新,它就会构建。

所以由于你的函数没有向vcxproj文件添加任何新信息,只是一些逻辑处理,不再在vcxproj文件中添加任何节点。

不过,我发现msbuild命令行可以实现你所需要的。

所以我想知道VS IDE的up-to-date是否有一些问题无法检测到更改的设置

并且还有最新的机制:

您更改 OPTIMIZE 环境变量时,在我这边,我将其从 FALSE 更改为 TRUE,保存它,重新启动 VS 的开发人员命令提示符,然后键入: msbuild xxx\xxx.vcxproj -t:build 会发现它会根据更改的属性设置构建您的项目。

GL 是 WholeProgramOptimizationtrue

并且新的输出文件是在构建时生成的,这意味着它会进行构建。

此外,您还可以create a bat file of the build process from msbuild command line。双击 bat 后,它将执行构建。

更新

VS IDE 无法做到这一点。我很抱歉告诉你。我有reported the issue to our DC Team,如果我没有详细描述这个问题,你可以检查、投票并添加任何 cmets。并且它将得到更多微软的关注。

到目前为止,您必须使用 msbuild 命令行才能获得所需的内容。

【讨论】:

是的,msbuild 命令行实用程序可以检测到此类更改,但我想通过 IDE 以某种方式实现此行为 VS IDE 无法做到这一点。我很抱歉告诉你。我有reported the issue to our DC Team,如果我没有详细描述这个问题,你可以检查、投票并添加任何 cmets。并且会得到更多微软的关注。到目前为止,您必须使用 msbuild 命令行。 到目前为止,这是正确的答案。而且我建议你可以接受这个答案,让其他社区成员知道问题出在哪里。 尽管有评论政策,但感谢您的努力!

以上是关于如果 Visual Studio 项目的设置取决于更改的环境变量,则不会自动重建 Visual Studio 项目的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 中的设置是与解决方案一起存储还是与 IDE 一起存储?

我应该在 Visual Studio 下为 Linux 交叉开发吗

visualstudio取消设置为启动项目

Visual Studio项目相对路径的设置,实用

什么是 Visual Studio 项目中的“平台工具集”设置

如何:从 Visual Studio 启动工具