加载 DLL 时出错 - 控制台应用程序 - Visual Studio Community 2022
Error loading DLL - Console App - Visual Studio Community 2022
我正在尝试在 Visual Studio 社区 2022 中创建的控制台应用程序项目中加载第三方 DLL。环境是 Windows10。我已经尝试了 .NET 5.0 和 6.0
无论我尝试过什么,我都会收到错误“未处理的异常。System.BadImageFormatException:错误的 IL 格式。文件的格式无效。”
我已经检查过,通常这个错误是因为我试图在 x86 应用程序或反之亦然中加载 x64 DLL,但我知道情况并非如此,因为:
- 我已经能够在 C 中加载这个特定的 DLL(使用 Codeblocks 中的 LoadLibrary())和 JAVA(使用 JNA),为 x86 目标平台配置应用程序。我已经在属性中为 x86 目标平台配置了这个控制台应用程序。
- 加载后的 DLL 开始写入日志文件。日志文件目的地是固定的,不能停用。每当我 运行 我的应用程序时,我都会看到正在写入的日志。我意识到正在使用 Sysinternals 的进程监视器写入日志。
日志只说
INFO: 2.23.00 12:14:27(00000015) PCLService.cpp:138 [22.11.2021] logCreate
INFO: 2.23.00 12:14:27(00000000) PCLService.cpp:141 PDA_Manager: DllMain attached
INFO: 2.23.00 12:14:27(00000000) PCLService.cpp:145 PDA_Manager: DllMain detach
通常,分离应该只在 DLL unloaded/program 关闭时发生。在这里它自动发生。就像程序无法保持DLL加载,给出错误信息。
这是我当前的代码。
using System;
using System.Reflection;
namespace ConsoleApp5
{
internal class Program
{
static void Main(string[] args)
{
//var DLL = Assembly.LoadFile(@"C:\Documentacion\VisaNet\Proyectos\Simpler\bin\Debug\x86\PCLService.dll");
var DLL = Assembly.LoadFrom("PCLService.dll");
Console.ReadLine();
}
}
}
我已经尝试了 LoadFrom() 和 LoadFile()。甚至尝试了 Load(),但错误与我不知道如何获取的附加信息不同。
我检查了 Assembly Binding Log Viewer (fuslogvw.exe) 和 Process Monitor。我没有看到任何明显的问题。
我假设无论发生什么错误,它确实在关于 PCLService.log 的最后 4 个条目时发生登录 Process Monitor。
虽然我是一名经验丰富的程序员,但我对 Visual Studio / C#
完全陌生
欢迎任何帮助。
要调用本机 dll,您必须将 [DllImport]
与函数原型一起使用。任何 Assembly.LoadXXX()
方法仅适用于托管库。也许 Using a 32bit or 64bit dll in C# DllImport 能帮到你。
我正在尝试在 Visual Studio 社区 2022 中创建的控制台应用程序项目中加载第三方 DLL。环境是 Windows10。我已经尝试了 .NET 5.0 和 6.0
无论我尝试过什么,我都会收到错误“未处理的异常。System.BadImageFormatException:错误的 IL 格式。文件的格式无效。”
我已经检查过,通常这个错误是因为我试图在 x86 应用程序或反之亦然中加载 x64 DLL,但我知道情况并非如此,因为:
- 我已经能够在 C 中加载这个特定的 DLL(使用 Codeblocks 中的 LoadLibrary())和 JAVA(使用 JNA),为 x86 目标平台配置应用程序。我已经在属性中为 x86 目标平台配置了这个控制台应用程序。
- 加载后的 DLL 开始写入日志文件。日志文件目的地是固定的,不能停用。每当我 运行 我的应用程序时,我都会看到正在写入的日志。我意识到正在使用 Sysinternals 的进程监视器写入日志。
日志只说
INFO: 2.23.00 12:14:27(00000015) PCLService.cpp:138 [22.11.2021] logCreate
INFO: 2.23.00 12:14:27(00000000) PCLService.cpp:141 PDA_Manager: DllMain attached
INFO: 2.23.00 12:14:27(00000000) PCLService.cpp:145 PDA_Manager: DllMain detach
通常,分离应该只在 DLL unloaded/program 关闭时发生。在这里它自动发生。就像程序无法保持DLL加载,给出错误信息。
这是我当前的代码。
using System;
using System.Reflection;
namespace ConsoleApp5
{
internal class Program
{
static void Main(string[] args)
{
//var DLL = Assembly.LoadFile(@"C:\Documentacion\VisaNet\Proyectos\Simpler\bin\Debug\x86\PCLService.dll");
var DLL = Assembly.LoadFrom("PCLService.dll");
Console.ReadLine();
}
}
}
我已经尝试了 LoadFrom() 和 LoadFile()。甚至尝试了 Load(),但错误与我不知道如何获取的附加信息不同。
我检查了 Assembly Binding Log Viewer (fuslogvw.exe) 和 Process Monitor。我没有看到任何明显的问题。
我假设无论发生什么错误,它确实在关于 PCLService.log 的最后 4 个条目时发生登录 Process Monitor。
虽然我是一名经验丰富的程序员,但我对 Visual Studio / C#
完全陌生欢迎任何帮助。
要调用本机 dll,您必须将 [DllImport]
与函数原型一起使用。任何 Assembly.LoadXXX()
方法仅适用于托管库。也许 Using a 32bit or 64bit dll in C# DllImport 能帮到你。