【问题标题】:How to include a GAC'd dll in a Wix managed CustomAction assembly?如何在 Wix 托管的 CustomAction 程序集中包含 GAC 的 dll?
【发布时间】:2014-01-14 16:59:54
【问题描述】:

我有一个基于 Wix 的安装程序,带有托管 (C#) CustomAction 程序集。正如in this question 所述,我使用Wix Visual Studio 扩展来构建包含在MSI 中的xx.CA.dll 程序集。

但是,正如Custom action project templates 所述:

“构建自定义操作项目将在目标目录中生成一个名为 $(TargetName).CA.dll 的附加 DLL。这是要流式传输到您的 MSI 二进制表中的 DLL....

自定义操作构建过程将自动打包您的 CA 所依赖的任何非 GAC 程序集。 "

在我的例子中,我引用了一个 Microsoft DLL,它位于我的开发和构建机器上的 GAC 中(因为这些机器上的构建过程需要它),但是这个 MSI 所在的目标机器run 可能在 GAC 中没有该 DLL,从而导致运行时异常:

System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft...' or one of its dependencies..

所以... 在构建托管 CustomAction 程序集的 .CA.dll 版本时,如何强制 Wix 包含 GAC 程序集?


已编辑以删除任何特定的 dll 名称,因为人们关注的是我提到的 dll,而不是 任何 GAC'd dll 的更大问题。

【问题讨论】:

  • 您是否有权重新分发该程序集?这个question表示它应该由IIS安装在目标机器上。
  • 您可以将Microsoft.Web.Administration.dll 的引用添加为nuget package。这将包括安装程序中的库。
  • @Shad,项目引用已经存在。但由于 .dll 也在 GAC 中,因此 Wix 工具不会将它们包含在它生成的 CA.dll 中。使用 nuget 包无法解决此问题。
  • 您能否详细说明这种行为的目的?如果您需要该 DLL,您将向 IIS 运行一些代码,对吗?如果没有 IIS,那么在您的 MSI 中存在 Microsoft.Web.Administration.dll 不会有任何区别。听起来您需要检查 IIS 安装作为先决条件...
  • 这个问题比我提到的特定 dll 更笼统——还有其他可能的 dll,这可能是个问题。

标签: c# wix


【解决方案1】:

在我检查了包含自定义操作的项目中的引用之前,我遇到了这个问题。它像您一样引用“Microsoft.Web.Administration”,但 CopyLocal 设置为 false。将其设置为 true 会将 DLL 拉入构建的 MSI,一切正常。

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 2011-02-12
    • 1970-01-01
    • 2020-01-25
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多