如何处理VS解决方案中的依赖混乱?

时间:2010-09-09 15:46:45

标签: visual-studio-2008 dependencies

我有一个大约70个项目的解决方案,它们之间有很多依赖关系(我实际上制作了一个图表,它有大约300个边缘)。我知道有些依赖是不必要的。我希望它在构建时使用多个内核,我想这些不必要的依赖可能会影响构建的并行性。

基本上我想知道构建程序需要哪些依赖项,哪些可以删除。我只关心能够构建软件,而不是运行它。有没有办法自动找到它?

项目是C ++,C ++ / CLI和C#。一些依赖项是手动指定的(使用VS中的Project Dependencies窗口),有些是作为托管程序集引用给出的(可能不是必需的),有些是作为静态/动态链接库给出的(也可能不是必需的)。

1 个答案:

答案 0 :(得分:1)

对于C#项目,您可以使用Ildasm.exe。查看.assembly指令的清单。 C#编译器会自动删除未使用的编译器。如果在项目的“引用”节点中看到没有匹配的.assembly指令的引用,则可以将其删除。

不确定C ++ / CLI编译器是否也这样做。尝试一下。

C ++要困难得多,因为构建工具可以生成超出.lib的文件。就像类型库一样,从IDL创建并由托管代码使用。或来自IDL的.h文件。或.rc文件中的.res文件。也许还没有人发现依赖。当您使用具有大量内核的计算机时,会破坏构建的类型。

通过使用/ VERBOSE选项分析链接器的输出,可以查看是否使用了静态或导入.lib。当使用.lib中的符号时,(大)输出中会有一行。通过颠倒.sln文件中的项目顺序并执行干净构建来强制淘汰缺少的项目依赖项,从而强制只使用一个CPU。