附加非托管DLL以与VS Installer软件包一起使用

时间:2019-07-18 14:30:46

标签: visual-studio dependency-management

一个更新:我现在正在使用Advanced Installer,因为它更易于学习/使用,并且我处于时间紧迫状态。它可以更好地自动检测文件,但是我仍然想知道是否需要包含额外的config / xml文件,现在还想知道一些预安装命令行,但这将是一个不同的问题。

问:我的应用程序使用NuGet程序包(Accord.Video.FFMpeg是最严重的违规程序),该程序包依赖于一系列不受管理的dll,exe甚至PSpice库。我需要将所有这些文件打包到一个我将不再使用VS Installer软件包构建的setup.exe文件中(部署在另一台计算机上),但是我无法获得安装程序项目来将它们识别为引用。

我的问题确实是我的程序包所依赖的所有dll,Accord.Video.FFMpeg依赖于这三个exe文件,每个文件都依赖于其他七个dll。所有这些都需要在部署时最终合并。

我无法使用参考管理器添加这些文件。我已经研究过制作第二个NuGet软件包,该软件包将所有内容组合在一起以添加内容,但是我不确定是否有必要。我还尝试过“将文件添加为现有项”,但这并没有使它们显示为安装程序项目中的依赖项。

我正在将Visual Studio 2017与C#包用于x64。现在,所有这些文件都位于我项目的debug文件夹中的libs文件夹中,并且已被“添加为现有文件”。

安装程序项目可以识别所有最高级别的dll,但我看不出如何强制添加更多dll。我是否需要使每个dll文件的生成操作“ Embedded Resource”并将其副本复制到输出目录“ Copy if Newer”?另外,我是否需要包括为NuGet dll /程序包找到的相关xml,config,pdb文件?还有一个.dylib文件和.so文件,但是我不确定。

我已经使用“依赖关系”应用程序查找了Accord.Video.FFMpeg文件之间的链接。

1 个答案:

答案 0 :(得分:0)

我今天早上刚刚建立一个安装程序,不得不以这种方式添加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>
  1. 以上内容位于wix片段中。

可以为您需要安装的任何数量的dll库重复此示例。只需将它们分组在引用它们的项目下即可。