Wixsharp - 无法加载文件或程序集

问题描述

我正在尝试使用 DefaultRefAssemblies.Add 方法在 Wix# 托管项目中包含一些参考文件

ManagedProject project = new ManagedProject();
project.DefaultRefAssemblies.Add("FontAwesome.Sharp.dll");
project.DefaultRefAssemblies.Add("protobuf-net.dll");
project.DefaultRefAssemblies.Add("Newtonsoft.Json.dll");
project.DefaultRefAssemblies.Add("ManagedOpenSsl.dll");
project.DefaultRefAssemblies.Add("ssleay32.dll");

当我尝试构建 MSI 时出现错误。问题发生在 ssleay32 程序集(OpenSSL 的一部分)的加载中。当我排除此文件时,构建成功。你能帮我理解这个例外吗? Wix# 项目的目标框架是 .NET Framework 4.8。

未处理的异常:System.BadImageFormatException:无法加载从 WixSharp 加载的文件或程序集“361984 字节,版本=1.15.0.0,Culture=neutral,PublicKeyToken=3775edd25acc43c2”或其依赖项之一。试图加载格式不正确的程序。 ---> System.BadImageFormatException: 错误的 IL 格式。

解决方法

Wixsharp 支持为以下目的编译的 .net 程序集:

  1. 平台 x86
  2. 托管程序集(非原生)
  3. 目标框架 3.5

因此,请确保“ssleay32.dll”具有上述 3 个要求。我发现的每个 ssleay32 程序集都是原生的(非托管)。

不走运的解决方法

您可以尝试将 ssleay32.dll 保存到嵌入资源文件中,在“ManagedOpenSsl.dll”类型使用之前,您应该将 dll 加载到内存中。 Load unmanaged assembly

祝你好运!