在Visual Studio中比较配置?

23

实际上,我遇到的一个问题是经常发生的:

考虑以下情况: 您刚刚创建了一个新的解决方案/项目,并开始创建/添加所有所需的内容。在这样做时,您始终处于调试配置中。您更改配置(特别是在C++项目中更改编译器、链接器设置),最终想要切换到发布模式以进行最终构建,结果会发生什么??您会收到大量关于缺少定义、链接库、预处理器定义、预编译头等的错误消息。

现在怎么办?您打开项目属性,选择树视图中的每个项目,并使用左上角的配置组合框进行前后切换。

由于两种配置保存在一个文件中,您无法使用简单的Diff工具,或者必须将项目文件中的两部分复制并粘贴到两个不同的文件中,比较它们,然后将所有内容合并回项目文件。

难道没有更好的解决方案可以比较一个项目中的不同配置吗?


4
当你在寻找事后解决方案时,我会做些什么来避免这个问题:每当我更改配置时,我会选择“所有配置”。对于大多数可用设置,尤其是链接器和包含设置,这样做是可以的。 - OregonGhost
2
你说得对。 我已经使用了所有配置,但有时我会错过一些细节,然后过了一段时间后才意识到,我不能成功地构建所有的配置,然后就要手动比较配置。 - Oliver
1
我对这个问题感到非常沮丧,以至于我正在考虑编写一个工具来解析项目文件并比较不同配置之间的各种值。你是否找到了解决方案(这样我就不必自己编写工具了)? - aldo
1
@aldo:不幸的是,这个问题没有被标记为已接受的答案,原因很简单:直到今天我都没有找到令人满意的解决方案。我一直希望有人能将这个功能集成到Visual Studio(本地或作为扩展)或SharpDevelop中,但直到今天都没有运气。 - Oliver
也许可以应用https://dev59.com/2XA65IYBdhLWcg3wzyH8 - n611x007
好问题,昨天我度过了非常“充实”的一天,花费了所有时间来配置项目: Debug/Win32 Release/Win32 Test/Win32 Debug/x64 Release/x64 Test/x64 即使喝咖啡也没能帮助我不在桌子上睡着 :) - blackbada_cpp
4个回答

5
我不确定它是何时引进的,但至少在VS2015中,您可以在属性页面屏幕上的配置下拉列表中选择“多个配置...”。然后,您可以从各个部分选择“所有选项”,并查看哪些参数不同(不同的会标出)。虽然它不会向您显示实际的值 - 您仍然需要来回切换 - 但至少您可以快速发现差异。

4
就现在而言,以下是我处理更改一个配置但忘记更改另一个配置的问题的方法。然而,我使用的这个过程有两个注意事项:1)它适用于VS2010及以上版本;2)我已经学会避免这个问题。
首先,我永远不会直接更改项目的属性页!它们往往使用生成条件,导致这个问题首先出现。相反,我总是将我的“属性管理器”打开到我的“解决方案资源管理器”旁边。
其次,我有几个“预定义”的属性表格,存储在名为common.properties的子文件夹中,例如:
- my_macros.props - 针对特定于我的解决方案(即框架)目录结构的通用宏定义。例如,我有一个定义称为MY_COMMON_OUTPUT_DIRECTORY,等于 $ (SolutionDir)bin\ $ (Configuration)\ $ (ProjectName)。 - my_dox_settings.props - 针对doxygen项目的特定设置。是的,我创建了一个单独的项目来使用doxygen创建文档。 - my_test_settings.props - 为我的单元测试框架指定的特定设置。同样,一个单独的项目用于单位测试。添加运行编译后可执行文件的后构建事件。 - my_app_settings.props - 我的应用程序框架的默认设置。例如,它将“输出目录”设置为先前提到的MY_COMMON_OUTPUT_DIRECTORY。 - my_app_settings_use_pch.props - 用于使用预编译标头的应用程序框架的其他更改。它只添加了一个/DI_WANT_MY_PCH编译器开关。 - include_boost_files.props - 添加boost库到我的项目的设置。 - include_ogre_files.props - 添加ogre库到我的项目的设置。 - include_sdl_file.props - 添加sdl库到我的项目的设置。 - 您应该已经有了这个想法...
接下来,我创建一个新的空属性表格,并将其作为最后一项添加。通常我称之为$ (ProjectName) .props [注意:确保自己扩展宏],然后通过属性管理器将其添加。
现在,当我需要对项目进行更改时,我只需简单地切换到属性管理器并更改相应的属性表格即可。请记住,这样做会影响使用该属性表格的所有项目。如果您只想影响当前项目,请修改$ (ProjectName) property-sheet。除非建立条件(我不会进入),否则一次更改会影响许多配置(和项目)。
我甚至将我的common.properties目录检查到源控件中。
希望这可以帮助。

听起来是个不错的主意。我从未使用过自定义属性页(因为我不知道它们)。但这听起来值得深入研究。 - Oliver
1
那么,这个解决方案对你来说怎么样了? - jump

1

我没有一个完美的解决方案来比较项目文件...但是就它的价值而言,您可能会发现将当前项目文件与源代码控制中的副本进行比较很有帮助。然后,在您看到一个部分中的更改值时,您可以快速查看该值在另一个部分中是否也已更改。

但是您的问题指定了一个新项目...所以我假设它还没有在源代码控制中。

因此,这里有另一个选择:将项目文件复制到另一个名称,然后比较这两个副本。是的,它们将是相同的...但是如果您使用像Beyond Compare 2这样的好工具,它允许您手动对齐部分,那么您可以右键单击左窗口中调试部分的第一行,选择手动对齐,然后右键单击右窗口中发布部分的第一行并选择手动对齐。哇...这就是您的更改。 :)


这些选项相当不错,我已经尝试过以更或多或少这些方式来处理这些事情,但它们感觉不舒服和丑陋。特别是使用diff工具(即使是VS内置的版本控制)只是表明这些工具已经存在。我们需要的是一种机制,可以正确地拆分xml文件,以便在彼此旁边显示两个版本(例如debug、release),而无需手动操作。 - Oliver

1
有一个叫做BeyondCompare3的程序非常便宜。虽然我很少推荐产品,但它应该能够在这里为您完成工作。请使用“将选择与剪贴板进行比较”的选项。

1
正如我之前所说,我尝试使用外部的差异工具来完成这些任务。但是手动打开原始的XML文件并手动对齐两个部分以便差异工具比较它们感觉非常不舒服。 - Oliver
你使用过这个特定的工具吗?不同的工具之间有很大的差异。使用BeyondCompare 3,您只需突出显示要比较的区域。虽然仍需要努力,但不需要像对齐那样费力。如果你正在寻找自动化的“修复我的配置”答案,你就必须自己编写它。这是一个足够小的问题,没有大量的人会编写一个实用程序,免费或收费,来解决它。 - Russell Steen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接