visual-studio - 附加非托管 DLL 以与 VS 安装程序包一起使用
问题描述
更新:我现在正在使用 Advanced Installer,因为它更容易学习/使用,而且我时间紧迫。它在某种程度上可以更好地自动检测文件,但我仍然想知道需要包含额外的 config/xml 文件,现在还想知道一些预安装命令行,但这将是一个不同的问题。
问:我的应用程序使用 NuGet 包(Accord.Video.FFMpeg 是最严重的违规者),这些包依赖于一系列非托管 dll、exe,甚至是 PSpice 库。我需要将这些全部打包到一个 setup.exe 中(部署在另一台机器上),我正在使用 VS Installer Packages 构建(不再),但我无法让安装程序项目将它们识别为参考。
我的问题确实是我的包依赖的所有 dll ——Accord.Video.FFMpeg 取决于这三个 exe 文件,每个文件都依赖于其他七个 dll。所有这些都需要在部署时最终组合起来。
我无法使用参考管理器添加这些文件。我已经考虑制作第二个 NuGet 包,它将所有内容组合在一起以添加它,但我不确定它是否有必要。我也尝试过“将文件添加为现有项目”,但这并没有让它们在安装程序项目中显示为依赖项。
我正在使用带有用于 x64 的 C# 包的 Visual Studio 2017。现在,所有这些文件都在我项目的调试文件夹中的 libs 文件夹中,并且它们已被“添加为现有文件”。
安装程序项目识别所有最高级别的 dll,但我不知道如何强制添加更多。我是否需要将每个 dll 文件的构建操作设置为“嵌入式资源”并将其复制到输出目录“如果较新则复制”?另外,我是否需要包含我为 NuGet dll/包找到的相关 xml、config、pdb 文件?还有一个 .dylib 文件和一个 .so 文件,但我不确定这些。
我使用 Dependencies 应用程序来查找 Accord.Video.FFMpeg 文件之间的链接。
解决方案
我今天早上刚刚构建了一个安装程序,不得不以这种方式添加 Prism dll。从项目中引用并不足以让安装程序自动选择它们。如果它们不在目标机器上的 GAC 中(由于被其他东西安装在那里),那么您必须将它们显式添加到您的安装程序中。
为了添加解决方案外部的 dll 引用,您需要将它们作为单独的组件元素添加到您的 wix 文件中。这是一个使用 log4net 依赖的简短示例。
假设有几件事: 1. 您有一个 Product.wxs 文件,它引用此组件组 C.Lib 2. 您有一个包含此组件组元素定义的 Lib.wxs 文件:
<ComponentGroup Id="CG.Lib" Directory="INSTALLFOLDER">
<Component Id="C.Lib">
<File Source='$(var.Namespace.Of.Yours.TargetPath)' />
</Component>
<Component Id="C.log4net">
<File Source='$(var.Namespace.Of.Yours.TargetDir)/log4net.dll' />
</Component>
</ComponentGroup>
- 以上是在一个wix片段内。
对于您需要安装的任意数量的 dll 库,可以重复此示例。只需将它们分组在引用它们的项目下。
推荐阅读
- java - 当我触摸 AppCompatEditText 时,键盘是不可见的
- java - AbstractButton 类型的 addActionListener 不适用于参数 (DigiUhr)
- swift - 无法使用 Twitter 登录
- bootstrap-4 - Boostrap 菜单项在垂直列表中单独显示
- ros - 用ros模拟dji矩阵100的问题
- nlp - 如何使用 torchtext 添加功能?
- netbeans - 在 Netbeans 10 中的接口方法上自动插入换行符?
- kubernetes - 如何允许/拒绝来自同一集群的其他命名空间的 http 请求?
- mysql - SQL,根据外键选择多个值,返回值
- python - 读取观察值中列不相等的熊猫数据框