WiX 工具集自定义操作 - 无法通过 WiX 项目找到 dll 和引用

WiX Toolset Custom Action - Unable to find dll and reference through WiX Project

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

Product.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

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

我使用的是最新的WiX工具集版本,谁能指出我哪里出了问题?

非常感谢。

假设您使用的是 c# wix 自定义操作。这个'dll not found'的问题一般是因为忽略了以下几点-

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

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

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

Dumpbin.exe 附带 Visual Studio C++ 开发包。 这将列出所有 public 自定义操作方法。 运行 在 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 文件中定义此路径以获得更好的结构。

Installer.wxi 文件

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

CustomAction.wxs

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

我使用了您的 "Edit 2" 答案并成功编译。我做的步骤:

  1. 将项目引用添加到我的自定义操作项目。
  2. 按照您的编辑 2 说明进行操作
  3. 编译成功

我想我们只是不能直接添加对 Scripts.CA.dll 的引用。谢谢 Ashish!