首页 > 解决方案 > WiX 工具集自定义操作 - 无法通过 WiX 项目找到 dll 和引用

问题描述

当我的安装程序即将完成时,我正在尝试使用 WiX 工具集的自定义操作注入 SQL 脚本。

产品.wxs,

<CustomAction Id="SetMyActionValues" Return="check" Property="MyAction" Value="dbServer= 
[DATABASE_SERVER];dbName=[DATABASE_NAME];dbUser=[DATABASE_USERNAME];dbPass= 
[DATABASE_PASSWORD];folderPath=[CREATESCRIPTS]"/>

<Binary Id="MyScripts" SourceFile="C:\Users\User\source\repos\Scripts\Scripts\bin\Scripts.CA.dll" />

<CustomAction Id="MyAction" Return="check" Execute="deferred" BinaryKey="MyScripts" DllEntry="CustomAction1"/>

当我将二进制条目的“FileSource”设置为绝对路径(C:\Users\User\source\repos\Scripts\Scripts\bin\Scripts.CA.dll)时,它编译成功,但给出了一个错误说 dll cannot在安装即将完成时找到。

找不到dll

接下来,我尝试将 Scripts.CA.dll 引用到我的 WiX 项目,并将 FileSource 更改为“Scripts.CA.dll”。这一次,我无法编译项目,Visual Studio 告诉我 Scripts.CA.dll 缺少程序集清单。

缺少装配清单

我正在使用最新的 WiX 工具集版本,谁能告诉我哪一部分出了问题?

非常感谢。

标签: windows-installercustom-actionwix3.10

解决方案


假设您正在使用 c# wix 自定义操作。这个“找不到dll”的问题通常是因为忽略了以下几点 -

  1. 您的二进制文件可能不需要自定义操作。自定义操作中使用错误的二进制文件的情况。

  2. 您的自定义操作名称可能与自定义操作项目中写入的内容不匹配。此名称区分大小写。

如果 ca.dll 中存在自定义操作方法,请尝试以下命令来识别。

Dumpbin.exe 带有 Visual Studio C++ 开发包。这将列出所有公共自定义操作方法。在 Visual Studio 开发命令提示符中运行。

Dumpbin.exe /exports Sample.ca.dll
  1. 未为自定义操作提供方法属性。如果你不提供 CustomAction 作为方法属性,它永远不会通过 ca.dll 暴露出来。
[CustomAction]
public static ActionResult customActionName(Session session)
{
     //Do Action
     return ActionResult.Success;
}

编辑 2:

我们通常不会给出任何文件的绝对路径,您可以使用 CA 项目参考来获取 ca.dll 的路径。例如。“$(var.CustomActionProjectName.TargetDir)\Scripts.CA.dll”。这里 CustomActionProjectName 是安装程序中为自定义操作引用的项目。该路径可以在 wxi 文件中定义,以便更好地结构化。

安装程序.wxi 文件

<?define customActionDllPath="$(var.CustomActionProjectName.TargetDir)\Scripts.CA.dl" ?>

自定义动作.wxs

<?include "Installer.wxi"?>
<Binary Id="MyScripts" SourceFile="$(var.customActionDllPath)\Scripts.CA.dll" />

推荐阅读