【问题标题】:Compare Configurations within Visual Studio?比较 Visual Studio 中的配置?
【发布时间】:2009-09-23 12:21:47
【问题描述】:

实际上,我遇到了一个我经常遇到的问题,因为我喜欢:

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

现在呢?您打开项目属性,选择树视图中的每个项目,然后使用左上角的配置组合框来回切换。

由于两个配置都保存在一个文件中,因此您不能也使用简单的 Diff-Tool,或者您必须将项目文件中的两个部分复制并粘贴到两个不同的文件中,比较它们并合并一切都回到项目文件中。

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

【问题讨论】:

  • 当您正在寻找事后考虑的解决方案时,这是我首先要避免此问题的做法:每当我更改配置中的任何内容时,我都会选择 所有配置。这适用于大多数可用设置,尤其是链接器和包含设置等设置。
  • 你是对的。我已经使用所有配置,但有时我只是错过了,过了一会儿我才意识到,我无法成功构建所有配置,然后手动比较配置的该死工作开始了...
  • 我对这个问题感到非常沮丧,以至于我正在考虑编写一个工具来解析项目文件并比较不同配置之间的各种值。你有没有找到解决方案(所以我不必编写自己的工具)?
  • @aldo:不幸的是,这个问题没有被接受的答案标签,这是有充分理由的:直到今天我还没有找到令人满意的解决方案。我一直希望有人将此功能集成到 Visual Studio(本机或作为扩展)或 SharpDevelop 中,但直到今天都没有运气。

标签: visual-studio configuration


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    对于现在的价值,以下是我如何处理更改一种配置而忘记更改另一种配置的问题。然而,我使用的这个过程确实有两个警告: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-libraries 添加到我的项目的设置。

    • include_ogre_files.props - 用于将 ogre 库添加到我的项目的设置。
    • include_sdl_file.props - 将 sdl 库添加到我的项目的设置。

    • 你应该明白了……

    接下来,我创建一个新的空白属性表并添加它。我通常将此称为 $(ProjectName).props [注意:一定要自己扩展宏],然后通过属性管理器将其添加为最后一项。

    现在,当我需要对项目进行更改时,我只需切换到属性管理器并更改相应的属性表即可。请记住,这样做会影响使用该属性表的所有项目。如果您只想影响当前项目,请修改 $(ProjectName) 属性表。除非您建立条件(我不会涉及),否则一项更改会影响许多配置(和项目)。

    我什至将我的 common.properties 目录检查到源代码控制中。

    希望对你有帮助,

    【讨论】:

    • 听起来是个好主意。我从未使用过自定义属性页(因为我不知道它们)。坚果听起来值得深入研究。
    • 那么这个解决方案对您来说效果如何?
    【解决方案3】:

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

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

    所以这里有另一个选项:将项目文件复制到另一个名称,然后比较两个副本。是的,它们将是相同的...但是如果您使用诸如 Beyond Compare 2 之类的允许您手动对齐部分的好工具,那么您可以右键单击左侧窗口中调试部分的第一行并选择对齐手动然后右键单击右侧窗口中释放部分的第一行并选择手动对齐。瞧……有你的变化。 :)

    【讨论】:

    • 这些都是很好的选择,我已经或多或少地尝试过这些方法,但它们感觉不舒服和丑陋。特别是差异工具的使用(甚至是用于源代码控制的 VS 内置版本)只是表明这些工具已经存在。我们所需要的只是一种机制,它可以正确拆分 xml 文件以显示两个版本(例如,调试、发布)并排显示,而您不必手动执行此操作。
    【解决方案4】:

    有一个名为 BeyondCompare3 的程序非常便宜。我很少认可产品,但它应该在这里为您完成工作。使用“将所选内容与剪贴板进行比较”选项。

    【讨论】:

    • 正如我已经说过的,我尝试使用外部差异工具来完成这些任务。但是打开原始的xml文件并手动对齐两个部分,让diff工具比较这两个部分,感觉很不舒服。
    • 你使用过这个特定的工具吗?差异工具之间有很多差异。使用 BeyondCompare 3,您只需突出显示要比较的区域。它仍然需要努力,但不如对齐。如果您正在寻找自动的“修复我的配置”答案,您将不得不自己编写它。这是一个足够小的问题,不会有很多人编写免费或其他实用程序来解决它。
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多