Visual Studio 2013 中的 MSM 合并模块:未检测到依赖关系

Posted

技术标签:

【中文标题】Visual Studio 2013 中的 MSM 合并模块:未检测到依赖关系【英文标题】:MSM Merge modules in Visual studio 2013 : Dependency not detected 【发布时间】:2015-11-19 20:48:55 【问题描述】:

我将包含 70 多个项目的可视化 C++ 解决方案从 VS2008 SP1 迁移到 VS2013 Update 5。 VS2008 SP1 使用了合并模块,而在 VS2013 中,我正在使用 plugin 来实现此功能。但是,合并模块没有检测到我正在构建的 dll 的外部依赖项。例如,其中一个 dll 依赖于 ace.dll(并在链接器->输入中指定 ace.lib),但未检测到该依赖关系。在 VS2008 中,检测到了相同的依赖关系。知道什么可能是错的或在哪里寻找?

【问题讨论】:

【参考方案1】:

我很惊讶它之前在 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。

【讨论】:

以上是关于Visual Studio 2013 中的 MSM 合并模块:未检测到依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio中的环境变量(以Visual Studio 2013为例)

Visual Studio 2013 中的默认模板项目崩溃

克服 Visual Studio 2013 中的 decltype 问题

Visual Studio 2013 中的“无法导入 ActiveX 控件”

Visual Studio 2013 中的 LoadTestException 错误

Visual Studio 2013 中的 Resharper 8.0