用于 VS 参考的 DLL 名称中的连字符

hyphen in DLL name for VS reference

首先,一些背景。我正在开发一个使用 WiX Toolset 来创建安装程序的应用程序。我们经常使用 WiX 来控制客户目录的设置,并将所需的 DLL 放在需要的位置。

现在,关于这个问题:我在我的应用程序中添加了一个新的 DLL,我们称它为 "NewCode.dll." NewCode.DLL 依赖于 "Dependency-1.DLL." 所以为了使我的程序工作,我还需要在安装程序中包含 Dependency-1.DLL。这就是我卡住的地方。由于 Dependency-1.DLL 名称中的“-1”,Visual Studio 似乎不允许我将其添加为对项目的引用。如果不添加它作为参考,我不相信 WiX 可以找到它,因此 NewCode.DLL 将在 运行 时失败。简单地删除连字符不是一个选项,因为 NewCode.DLL 将无法再引用 Dependency-1.DLL。

我已经确认,如果我手动将 Dependency-1.DLL 放入所需的文件夹,一切都会开始工作。所以我想做一些 "batch file post-build-action magic" 来复制文件是一个有效的选择,但它并不理想。我真的更愿意继续依赖 WiX 工具集。


有效答案:

接受的解决方案确实解决了我的问题。但我想我会添加到我的 post 以防其他人落入与我相同的陷阱。第一个 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>

您不需要对预建 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" />