一个更新:我现在正在使用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文件之间的链接。
答案 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>
可以为您需要安装的任何数量的dll库重复此示例。只需将它们分组在引用它们的项目下即可。