首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加非托管DLL以与VS安装程序包一起使用

附加非托管DLL以与VS安装程序包一起使用
EN

Stack Overflow用户
提问于 2019-07-18 22:30:46
回答 1查看 33关注 0票数 0

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

问:我的应用程序使用NuGet包(Accord.Video.FFMpeg是最糟糕的),这些包依赖于一系列非托管dlls、exes,甚至PSpice库。我需要将所有这些都打包到一个setup.exe中(部署在不同的机器上),它是我使用VS Installer包构建(不再)的,但我无法让installer项目将它们识别为引用。

我的问题实际上是我的包所依赖的所有dlls -Accord.Video.FFMpeg依赖于这三个exe文件,每个文件都依赖于其他七个dll。所有这些都需要在部署时最终组合起来。

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

我正在使用带有x64的C#包的Visual Studio2017。现在,所有这些文件都在我的项目的debug文件夹中的libs文件夹中,并且它们已经“作为现有文件添加”。

安装程序项目可以识别所有最高级别的dll,但我不知道如何强制添加更多dll。我是否需要将每个dll文件的构建操作设置为"Embedded Resource“,并将其复制到输出目录"Copy if Newer"?另外,我是否需要包含我为NuGet dll/包找到的相关xml、配置和pdb文件?还有一个.dylib文件和一个.so文件,但我不太确定这两个文件。

我使用了Dependencies应用程序来查找Accord.Video.FFMpeg文件之间的链接。

EN

回答 1

Stack Overflow用户

发布于 2019-07-18 22:47:30

我今天早上刚构建了一个安装程序,不得不以这种方式添加Prism dll。从项目中引用并不足以让安装程序自动拾取它们。如果它们不在目标机器上的GAC中(由于是由其他东西安装在那里的),那么您必须显式地将它们添加到安装程序中。

为了添加解决方案外部的dll引用,您需要将它们作为单独的组件元素添加到wix文件中。下面是一个使用log4net依赖的简单示例。

假设有几件事: 1.你有一个引用这个组件组的Product.wxs文件C.Lib 2.你有一个包含这个组件组元素定义的Lib.wxs文件:

代码语言:javascript
复制
    <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库,都可以重复此示例。只需将它们分组到引用它们的项目下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57096953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档