首先,一些背景知识。我正在使用WiX Toolset创建安装程序的应用程序。我们经常使用WiX来控制设置客户端的目录,并将所需的DLL放在需要的位置。
现在,关于问题:我在我的应用程序中添加了一个新的DLL,让我们调用它" NewCode.dll。" NewCode.DLL依赖于" Dependency-1.DLL。"因此,为了使我的程序工作,我还需要在安装程序中包含Dependency-1.DLL。这就是我陷入困境的地方。因为" -1"在Dependency-1.DLL的名称中,Visual Studio似乎不允许我将其添加为项目的引用。如果不添加它作为参考,我不相信WiX可以找到它,因此NewCode.DLL将在运行时失败。简单地删除连字符不是一个选项,因为NewCode.DLL不再能够引用Dependency-1.DLL。
我已经验证过,如果我手动将Dependency-1.DLL放入所需的文件夹,一切都会开始工作。所以我想做一些"批处理文件后构建动作魔术"复制文件是一个有效的选项,但它并不理想。我真的更愿意继续依赖WiX工具集。
工作回答:
接受的解决方案确实解决了我的问题。但我想我会添加到我的帖子中,以防其他人陷入我所做的同一个陷阱。第一个DLL是直接引用,而第二个DLL是第一个依赖的传递引用。我为组件组设置了默认位置,以便在哪里查找DLL作为TargetDir。使用我的旧设置,这假设VS将通过" Copy Local = true"来处理将DLL复制到TargetDir。但是,现在,如果您查看我添加的第二个DLL,我会明确设置源代码,而WiX正在为我移动DLL。
由于WiX现在为我移动DLL,这让我解决了VS不允许带连字符的DLL名称作为参考的问题。
<ComponentGroup Id="AForge" Directory="INSTALL_ROOT" Source="$(var.Pslf.TargetDir)">
<Component Guid="{FA5BEE4F-0D54-4B76-BAEF-DC8E31F6605F}">
<File Name="AForge.Video.FFMPEG.dll" KeyPath="yes"/>
</Component>
<Component Guid="{1FB3EFEA-1BF3-4416-8AE3-026F2E4EECFC}">
<File Name="avcodec-53.dll" KeyPath="yes" Source="$(var.SolutionDir)pslf\lib\AForge\avcodec-53.dll"/>
</Component>
</ComponentGroup>
答案 0 :(得分:1)
您不需要对预构建的DLL进行WiX引用。只需在Source属性中添加直接路径:
<File Id="file_Dependency_1.DLL" Name="Dependency-1.DLL" KeyPath="yes"
DiskId="1" Source="$(var.SolutionDir)path\to\dlls\Dependency-1.DLL" />