如果 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 是 WholeProgramOptimization
到 true
。
并且新的输出文件是在构建时生成的,这意味着它会进行构建。
此外,您还可以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 项目的主要内容,如果未能解决你的问题,请参考以下文章