Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 生成具有依赖项的解决方案,用于通过数百个项目构建VS 2010_Windows_Visual Studio 2010_Build_Dependencies - Fatal编程技术网

Windows 生成具有依赖项的解决方案,用于通过数百个项目构建VS 2010

Windows 生成具有依赖项的解决方案,用于通过数百个项目构建VS 2010,windows,visual-studio-2010,build,dependencies,Windows,Visual Studio 2010,Build,Dependencies,我们有几百个VisualStudio项目文件,我需要将它们组合成一个用于构建的解决方案。我们目前有一个定制的ruby脚本,它使用rake来实现这一点。但是非常脆弱,只允许少数visual studio宏($(TargetDir)、$(TargetName)等)通过,其余的则失败。加上Ruby的语法让我像Perl一样恼火:错误的方式 所以我的问题是,给定一个目录,是否有一个工具可以递归地查找所有的.vcxproj和.csproj文件,并生成一个具有依赖关系的解决方案文件?当我说“具有依赖性”时,它

我们有几百个VisualStudio项目文件,我需要将它们组合成一个用于构建的解决方案。我们目前有一个定制的ruby脚本,它使用rake来实现这一点。但是非常脆弱,只允许少数visual studio宏($(TargetDir)、$(TargetName)等)通过,其余的则失败。加上Ruby的语法让我像Perl一样恼火:错误的方式

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

如果不是解决方案文件,是否有人知道会发出依赖项列表的内容

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

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

没有

你的要求很合理;你处理这个问题的方法很合理。不幸的是,这些工具跟不上你。(我们也有同样的问题。)

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

  • 从生成
    *.vcproj/*.sln
    “参考项目定义”, 使用诸如
    CMake
    QMake
    Scons
    Gyp
    。我们的主要系统目前处于 在
    Scons
    上,使用我们的自定义Python 用于导航这些依赖项的代码, 基于项目生成解决方案 (爬行依赖项)。通过 默认情况下,我们生成一个“完整” 每个项目的解决方案(包括 所有必需的支持项目), 加上“掌握所有项目” 解决方案它工作得很好。但是 这是需要努力的定制工作, 我们将
    Scons
    扩展到 描述我们的项目(但我们只是 依靠
    scon
    生成
    *.sln
    *.vcproj

  • 编写一个自定义工具,通过 正在分析中的所有
    *.vcproj
    文件 你的工作区。这是工作,但可以做到。这些文件的导航可能“很棘手”,但您可以使用一个“足够好”的解决方案,该解决方案使用guid作为散列键来生成这些依赖项

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

    对不起。MSVS是一个非常好的IDE(用于迭代开发),是一个糟糕的构建配置管理系统,其设计目的与我们所说的不同


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

    附带说明,拥有数百个VS项目是个坏主意,它会扼杀VS性能,请参阅:

    • (8页)
    • (7页)

    #1您列出的字母汤就是其中一个。它们是什么?抱歉——我们使用的是scons()和qmake(),但是如果您想学习它,CMake是非常强大的()。但是,Google的gyp()显示了许多有趣的承诺(还没有使用它)。Scons是一个生成系统,但提供本机.sln和*.vcproj的“导出”。其他的(cmake、qmake、gyp)是“项目生成器”,它们从自己的“项目定义文件”生成本机*.vcproj/.sln文件。这些都是做什么的工具?如果有足够的输入,是否生成依赖项?(编辑)看起来您在我键入时回答了我的问题…实际上我们从未在visual studio中加载解决方案。它仅用于构建(最终调用msbuild)。当我们编辑东西时,我们只加载一个或两个项目。原始问题的实际答案如何?你有什么信息吗?据我所知,MS没有提供合适的API来构建这样一个.sln文件。要在以编程方式编写VS.sln和.xxproj文件之前探索程序集依赖关系,我建议使用Mono.Cecil库。