【问题标题】:Suggestions for maintaining Visual Studio vcproj project files in version control在版本控制中维护 Visual Studio vcproj 项目文件的建议
【发布时间】:2010-10-11 08:20:25
【问题描述】:

Microsoft Visual Studio 使用 XML 来保存其 .vcproj 项目文件。所以区分 XML 项目文件应该很容易。

不幸的是,如果您更改任何项目文件的属性,Visual Studio 会坚持随机打乱项目文件的 XML 节点!这使得项目文件更改的文本差异和合并基本上是不可能的。更改一个编译器设置会使我的视觉差异工具认为我已经更改了文件中 50% 的行!我什至尝试过一些 XML diff 工具,但它们只是显示了同样混乱的更结构化的视图。

有人对在源代码管理中维护.vcproj 文件有什么建议吗?或者说服 Visual Studio重新排列 .vcproj 文件中的 XML 节点的方法?

(我也研究过使用 CMake 之类的工具从对差异更友好的文本文件生成 .vcproj 文件,但 CMake 有其自身的问题。)

【问题讨论】:

    标签: visual-studio version-control project projects-and-solutions


    【解决方案1】:

    这似乎不时出现。

    对于插件或其他规范化工具来说,这可能是一个成熟的问题。

    这将是一个很好的副业,直到 MS 决定修复它。那么你就不走运了——除非他们当然愿意购买你的 IP。

    有人想开始一个开源项目或商业产品吗?我是游戏。

    我可能会尝试一个独立的规范化工具,然后看看我是否可以把它变成一个插件。

    【讨论】:

    • 我想编写一个简短的 Python 脚本来按字母顺序排列 .vcproj 文件 XML 节点会很容易。我看到 WinMerge 有用于区分 XML 的插件;也许有人应该编写“vcproj alphabetizer”WinMerge 插件?也许我会。 :)
    【解决方案2】:

    我们现在在这里看到这种情况,项目文件的配置在几个人的计算机上重新排序,这非常令人沮丧......

    *注意:我们都使用 VS 2008 Pro,而不是 Team

    起初看起来它们是随机重新排序的,但实际上有一个模式,它根本不是随机的。

    对于一组,配置按平台排序,然后按配置:

    • 调试|Win32
    • 调试|x64
    • 发布|Win32
    • 发布|x64
    • 调试 DX11|Win32
    • 调试 DX11|x64
    • 发布 DX11|Win32
    • 发布 DX11|x64
    • ...

    对于另一组,配置按 Config 排序,然后按 Platform:

    • 调试|Win32
    • 发布|Win32
    • 调试 DX11|Win32
    • 发布 DX11|Win32
    • 调试|x64
    • 发布|x64
    • 调试 DX11|x64
    • 发布 DX11|x64
    • ...

    纵观 perforce 的历史,这与同一组人提交的多个项目是一致的,并且大约有 50/50 的比例,所以这不仅仅发生在一个人身上。

    这是你们都看到的同一个问题吗? 如果是这样,我希望此模式有助于找到不涉及宏/额外差异步骤的解决方案...

    它必须是某个地方的设置,或者是点击某物的副作用,因为它在每台机器上都是 100% 可重现的。即使您为初始环境布局(VC++、VB、通用开发等...)选择哪个选项有点傻。

    【讨论】:

      【解决方案3】:

      我使用 WinMerge 作为我的差异工具,并启用了移动块检测。它并不能完全解决问题,但它使可视化差异更容易忍受。

      【讨论】:

        【解决方案4】:

        您在哪个版本的 Visual Studio 中看到此内容?

        我对 .vcproj 文件做了很多工作(我们在多个 Visual Studio 版本中为我们的库维护项目文件的版本,并且我一直在区分和合并这些东西),但我从未见过这种行为。

        【讨论】:

        • VS2008,但是听说VS2005也有同样的问题。 “vcproj shuffle”随机发生。我的项目有几个(Headers 和 Sources)子文件夹。导航它们时,VS 偶尔会在 GUI 中重新排序项目,随机或按字母顺序对它们进行排序。这可能是相关的。
        • 谢谢。我一定会留意这一点,如果我学到任何可能有帮助的东西,我会在这里发布。
        【解决方案5】:

        我在 Adob​​e 的团队在 vs2008 中也看到了同样的情况。只是一个基本的 Debug/Release,win32/win64 项目为您提供 4 种配置和随机洗牌。有几个人试图弄清楚 devstudio 重新排序的时间和原因,但目前的想法是排序键是关键字哈希 - 因此是半随机的。我们已经放弃了,在代码审查中只是总结了“真正的”变化。

        【讨论】:

        • 为什么不创建一个 XSLT,根据一些标准顺序对 .vcproj 文件重新排序。对您提前比较的两个文件执行此操作,您将比较苹果和苹果。我已经使用 SSIS .dtsx 文件完成了此操作,如果您盯着它们太久,它们会发生变化。
        【解决方案6】:

        我想我已经找到了这次洗牌的原因。至少在 VS2008 中。

        如果您安装 x64 编译器,VS 会将项目排序为:

        Debug|Win32
        Debug|x64
        Release|Win32
        Release|x64
        

        如果你不这样做,它会像这样订购它们:

        Debug|Win32
        Release|Win32
        Debug|x64
        Release|x64
        

        因此,请确保您的所有同行都安装了相同的编译器集,这样它就不会随机播放。

        经过测试,这种行为似乎是可重现的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-06
          • 2013-11-16
          • 2010-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-15
          相关资源
          最近更新 更多