【问题标题】:Generate Solution with dependencies for building VS 2010 with hundreds of projects生成具有依赖项的解决方案,用于构建具有数百个项目的 VS 2010
【发布时间】:2012-06-07 15:10:33
【问题描述】:

我们有数百个 Visual Studio 项目文件,我需要将它们组合成一个构建解决方案。我们目前有一个使用 rake 的自定义 ruby​​ 脚本来执行此操作。但它很脆弱,只允许一些 Visual Studio 宏($(TargetDir)、$(TargetName) 等)通过,其余的则失败。再加上 Ruby 的语法像 Perl 一样让我难以接受:错误的方式。

所以我的问题是,给定一个目录,是否有一个工具可以递归地查找所有 .vcxproj 和 .csproj 文件并生成具有依赖关系的解决方案文件?当我说“有依赖关系”时,它意味着一些项目需要先于其他项目构建。我在这里找到了一些关于堆栈溢出的其他帖子,这些帖子指向了一个生成解决方案文件的工具:但它不会生成依赖项。因此,没有依赖关系,任何解决方案创建工具都是完全无用的。有谁知道可以做到这一点?

如果不是解决方案文件,有没有人知道会发出依赖列表的东西?

附: 在有人问之前:手动创建解决方案文件是完全不可能的。我们的项目文件太多了。

【问题讨论】:

    标签: windows visual-studio-2010 build dependencies


    【解决方案1】:

    所以我的问题是,给定一个目录 有没有递归的工具 找到所有的 .vcxproj 和 .csproj 文件并生成解决方案文件 有依赖关系?

    没有。

    您的要求非常合理;你对这个问题的处理是相当理性的。不幸的是,这些工具没有跟上您的步伐。 (我们遇到了同样的问题。)

    您将不得不自己编写脚本,或者自定义工具。这就是我们所做的。我见过的成功方法包括:

    1. 从以下位置生成*.vcproj/*.sln “参考项目定义”, 使用CMakeQMakeSconsGyp。我们的主要系统目前位于 在Scons 上,使用我们的自定义 Python 导航这些依赖项的代码, 根据项目生成解决方案 (蜘蛛依赖)。经过 默认情况下,我们生成一个“完成” 每个项目的解决方案(包括 所有必需的支持项目), 加上“掌握所有项目” 解决方案。它工作得很好。但, 这是需要努力的定制工作, 我们将Scons 扩展为 描述我们的项目(但我们只是简单地 依靠Scons一代 *.sln*.vcproj)。

    2. 编写一个自定义工具来“查找”这些依赖项 解析所有*.vcproj 文件 你的工作空间。这是工作,但可以做到。这些文件的导航可能“棘手”,但使用 GUID 作为哈希键来生成这些依赖项的“足够好”的解决方案可能会很好。

    我完全同意你的观点:当你超越“简单”(例如,很多项目,是的,我们也有数百个)时,手动维护这种类型的东西(项目依赖项)非常困难。

    对不起。 MSVS 是一个相当不错的 IDE(用于迭代开发),也是一个糟糕的构建配置管理系统,并不是为我们所说的事情而设计的。

    因为我关心你的理智和永恒的灵魂,请不要尝试在 MSBuild 中编写你的自定义解决方案。

    【讨论】:

    • #1 你列出的字母汤是相当的清单。它们是什么?
    • 抱歉 -- 我们使用的是 scons (scons.org) 和 qmake (en.wikipedia.org/wiki/Qmake),但如果你想学习 CMake,它非常强大 (cmake.org)。但是,Google 的 gyp (code.google.com/p/gyp/wiki/GypUserDocumentation) 显示了很多有趣的承诺(还没有使用它)。 Scons 是一个构建系统,但提供本地 .sln 和 *.vcproj 的“导出”。其他(cmake、qmake、gyp)是“项目生成器”,它们从自己的“项目定义文件”生成本机 *.vcproj/.sln 文件。
    • 这些都是用来做什么的工具?给定足够的输入生成依赖项? (编辑)看起来你在我打字时回答了我的问题......
    【解决方案2】:

    另一方面,拥有数百个 VS 项目是个坏主意,它会扼杀 VS 性能,请参阅two white-books

    【讨论】:

    • 实际上我们从来没有在 Visual Studio 中加载解决方案。它仅用于构建(最终调用 msbuild)。当我们编辑东西时,我们只加载一两个项目。
    • 原始问题的实际答案如何?你有什么信息吗?
    • 据我所知,MS 没有提供适当的 API 来构建这样的 .sln 文件。要在以编程方式编写 VS .sln 和 .xxproj 文件之前以编程方式探索程序集依赖项,我建议使用 Mono.Cecil 库。
    猜你喜欢
    • 2012-07-13
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多