繁体   English   中英

从MSBuild获取所有直接和间接项目依赖项的列表

[英]Get a list of all direct and indirect project dependencies from MSBuild

背景

我有一个巨大的应用程序,该应用程序分为数十个(数百个?)较小的C#项目。 为了构建它,我简单地调用

msbuild my_root_project.csproj

因为根项目只是导入所有必需的子项目(可以导入其他子项目,可以导入其他子项目,...)。 当MSBuild遍历所有依赖项并一个一个地构建它们时,这可以很好地工作。 结果,我最终在我的生成输出文件夹(例如Debug)中找到了一堆dll。

附加信息

这里重要的是,这是一个来自NuGet之前时代的古老项目。 因此,没有什么比单个文件包含所有外部依赖项的摘要更重要了。 相反,我将所有外部二进制文件以以下方式存储在“ ext_libs”文件夹中:

root
|-> src
    |-> CsProject1
    |-> CsProject2
    ....
    |-> YetAnotherCsProject
    ....
    |-> MyRootProject
    ....
|-> ext_libs
    |-> Newtonsoft.Json 
        |-> ... dlls
    |-> SevenZip (same here)
        |-> ... dlls
    |->  ...

这些外部二进制文件可以在任何CsProject中引用。 此外,甚至有可能我的根项目使用的几个子项目导入同一个库(例如,许多子项目使用Newtonsoft.Json)。

问题

我需要从ext_libs文件夹中获取所有库的确切列表,该文件夹由我的根项目或其任何从属项目使用。

我看了一下MSBuild输出日志,发现它提供了类似这样的消息:

Building project XYZ.csproj /reference:ext_libs/lib1.dll /reference:ext_libs/lib2.dll ...
...
...
Building project ABC.csproj /reference:ext_libs/lib5.dll /reference:ext_libs/lib23.dll
...

由于MSBuild被证明能够遍历所有依赖关系并一一解析所有依赖关系。 我想知道是否可以通过某种方式指示执行以下操作:

msbuild /dontBuild /listReferences

另外,我可以手动遍历所有csproj文件,但是显然我更喜欢使用现有工具,而不是创建自定义工具。

其他限制

  • 由于某些原因,我不能只检查输出文件夹的内容,所以这不是一个选择。
  • 最好是.NET 4,但如果可以在较新版本的框架中轻松解决此问题,...仍然很高兴听到解决方案:)。

我写了一个工具来在这种情况下提供帮助。 https://github.com/chris1248/SolutionBuilder
将其指向目录,它将为您生成一个包含所有.csproj和.vcxproj文件的解决方案文件。 它吐出一个.dgml文件,您可以在Visual Studio中打开该文件,并以图形格式检查项目依赖项。
如果它不能完全满足您的需求,则可以对其进行分叉并对其进行修改以适合您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM