2010-12-03 44 views
2

问题:假设您有一台机器,某些.NET程序集在其上注册,加载和/或正确运行。这个程序集可以通过p/invoke引用非托管DLL,它可以利用COM对象,并且它实际上可以在C++/CLI中实现。如何在一个自动步骤中生成所有必须安装的其他所有DLL(托管和非托管)的列表,以便在另一台计算机上进行注册,加载和/或运行?什么工具(或工具链)将生成.NET程序集所需的完整DLL列表?

部分解决方案#1:可以使用红门的.net reflector标识所有受管引用。

部分解决方案#2:红色栅的.net reflector具有“分析”的功能,将确定通过P利用托管DLL /调用

部分解决方案#3:Depends可以识别由一个EXE导入的托管DLL或DLL。 (并且在其分析模式中,也可以识别动态依赖关系)。

打开:如何在批处理模式下运行这些工具(或其他),而不是手动点击所有依赖链?

奖金问题:什么COM引用 - 是否有任何方法来确定所需的COM对象,然后还跟踪它们的依赖关系?

相关问题:我看到this question覆盖类似的地面。 (但是它没有指定也可以找到非托管的依赖关系,并且接受的答案是.net反射器,它只提供我正在寻找的部分内容。)类似于this one

+0

我相信,所有的依赖位于可执行文件/程序集的元数据中。恐怕你必须开始解析PE头来提取这些信息。一旦你理解了格式,这不是非常困难。 – 2010-12-04 04:19:17

回答

0

你根本无法,至少不能以可靠的方式。安装软件包允许在安装时执行文件放置,注册表项和其他操作。

除非该项目为XCOPY deployed,否则无法确定并确保安装新的正确安装所需的内容。

+0

已确认 - 我已更改标题和问题说明以指定“DLL”(这是我的意思)而不是“组件”(可能被解释为意指文件,注册表项等)。 – Eric 2010-12-04 03:54:51