【问题标题】:hyphen in DLL name for VS reference用于 VS 参考的 DLL 名称中的连字符
【发布时间】:2016-03-24 21:21:00
【问题描述】:

首先,一些背景。我正在开发一个使用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 放入所需的文件夹,一切都会开始工作。所以我想做一些“批处理文件后构建动作魔术”来复制文件是一个有效的选择,但它并不理想。我真的更愿意继续依赖 WiX 工具集。


工作答案:

接受的解决方案确实解决了我的问题。但我想我会添加到我的帖子中,以防其他人落入我所做的同一个陷阱。第一个 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 的引用,该引用有效,然后删除了该引用并将 dll 重命名为在文件名中包含“-1.dll”,它让我添加新的引用就好了。这是在 Visual Studio 2015 上。“似乎不允许我将其添加为对项目的引用”——所以你去“添加->引用”?并得到一个错误?什么错误?
  • 我找到了不同的解决方案,但错误消息是“程序集文件无效或无法访问”。然而,让我感到奇怪的是,简单地从名称中删除连字符就可以解决这个问题(只是不适合我的目的)

标签: c# visual-studio dll wix windows-installer


【解决方案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" />

【讨论】:

    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多