背景
我有一个巨大的应用程序,它被分成几十个(百分之一?)小型C项目。为了构建它,我简单地调用
msbuild my_root_project.csproj
因为根项目只是导入所有必需的子项目(可以导入其他子项目,也可以导入其他子项目,…)。
当MSBuild遍历所有依赖项并逐个构建它们时,这种方法可以很好地工作。结果,我在构建输出文件夹(例如Debug)中得到了一堆dll。
附加信息
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文件,但显然我更喜欢使用现有工具,而不是创建自定义工具。
-
由于某些原因,我不能只检查输出文件夹的内容,所以这不是一个选项。
-
最好是.NET4,但如果问题可以在框架的最新版本中轻松解决。。。很高兴听到答案:)。