我将包含70多个项目的可视化C ++解决方案迁移到VS2008 SP1的VS2013 Update 5。 VS2008 SP1使用的是合并模块,在VS2013中,我正在使用此plugin来实现此功能。但是,合并模块没有检测到我正在构建的dll的外部依赖性。例如,其中一个dll依赖于ace.dll(并在链接器 - >输入中指定ace.lib),但未检测到该依赖关系。在VS2008中,检测到相同的依赖关系。知道什么可能是错的或在哪里寻找?
答案 0 :(得分:0)
我很惊讶它之前在VS 2008安装项目中检测到了依赖关系。据我所知,您可能用于构建代码的VS 2008开发项目与安装项目中的依赖项之间没有任何关联。
a)您可以将文件从任何位置拖放到设置项目中。没有要求VS安装项目从VS 2008项目中的文件生成MSI文件。
b)对特定Dll的依赖不能导致Dll包含在设置中,因为大量的依赖Dll包含在单独的可再发行组件中。这些Dll甚至可能符合安装项目的先决条件以及它们的安装方式。您不希望(例如)MSI设置中的每个Crystal Reports Dll,SQL Dll等,因为它们需要通过可再发行组件或它们自己的合并模块进行安装。每个Dll都没有大数据库,应该使用哪个可再发行或合并模块进行部署,所以VS项目肯定不知道。
c)通过查看二进制文件,不能检测到所有依赖项。 COM依赖项未在二进制文件中的任何位置列出,因为它们通过guid动态链接,因此永远不会以这种方式检测它们。
一般来说,坏消息是开发人员需要知道哪些依赖项需要单独安装,哪些是redist设置,哪些是标准Dll,例如那些属于操作系统且永远不需要安装的Dll。