C# CLR 异常 "BadImageFormatException: Could not load file or assembly"
C# CLR Excecption "BadImageFormatException: Could not load file or assembly"
我使用的是 VS 2019 版本 16.8.2
我在我的“WPF App (.NET)”项目中引用了一个“CLR Class Library(.NET Core)”项目,但我遇到了一个异常:
BadImageFormatException: Could not load file or assembly 'LibCLR, Version=1.0.7646.21580, Culture=neutral, PublicKeyToken=null'. An attempt was made to load a program with an incorrect format.
先说说我是怎么做到的
创建“WPF App (.NET)”项目“TestCLR”
在此解决方案中添加一个新的“CLR Class Library(.NET Core)”项目“LibCLR”
“LibCLR”的“公共语言运行时支持”设置
将“TestCLR”定位到“.NET 5.0”
"LibCLR.h" 在项目“LibCLR”中自动创建,代码在里面
#pragma once
using namespace System;
namespace LibCLR {
public ref class Class1
{
// TODO: Add your methods for this class here.
};
}
- 添加“新 LibCLR.Class1();”在 MainWindow.xaml.cs 项目“TestCLR”中
using System.Windows;
namespace TestCLR {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
new LibCLR.Class1();
}
}
}
全部重建并调试,然后遇到异常
然后我将解决方案平台更改为x64或x84,异常都是一样的。
如果我在步骤 1 中为“TestCLR”选择“WPF App (.NET Framework)”,为“LibCLR”选择“CLR Class Library(.NET Framework)”,效果会很好" 在步骤 2
为什么不起作用?
我不能在“WPF App (.NET Core)”项目中使用“CLR Class Library(.NET)”项目作为项目参考吗?
我该如何解决这个问题?
最常见的答案是在 x86 和 x64 目标之间变化。在对您的原始问题 的评论中,您提到您已经尝试过但它对您不起作用。所以,我有一个建议。您正在构建一个 WPF 项目,并以 dotnet 5.0 为目标。 Dotnet 5.0 与 OS 无关。 WPF 是 OS 特定的。它需要 Windows.
尝试使用 OS 特定的目标框架名字对象。打开两个项目的 .csproj 文件。尝试将两个项目设置为 <TargetFramework>net5.0-windows</TargetFramework>
清理解决方案、重建并测试。
我们这里有一个依赖于 Windows 的解决方案。我们不应该有,但让我们尝试明确定位它。尤其是那个C++项目。
多读书
您应该在此处将平台目标更改为“X86”
我使用的是 VS 2019 版本 16.8.2
我在我的“WPF App (.NET)”项目中引用了一个“CLR Class Library(.NET Core)”项目,但我遇到了一个异常:
BadImageFormatException: Could not load file or assembly 'LibCLR, Version=1.0.7646.21580, Culture=neutral, PublicKeyToken=null'. An attempt was made to load a program with an incorrect format.
先说说我是怎么做到的
创建“WPF App (.NET)”项目“TestCLR”
在此解决方案中添加一个新的“CLR Class Library(.NET Core)”项目“LibCLR”
“LibCLR”的“公共语言运行时支持”设置
将“TestCLR”定位到“.NET 5.0”
"LibCLR.h" 在项目“LibCLR”中自动创建,代码在里面
#pragma once
using namespace System;
namespace LibCLR {
public ref class Class1
{
// TODO: Add your methods for this class here.
};
}
- 添加“新 LibCLR.Class1();”在 MainWindow.xaml.cs 项目“TestCLR”中
using System.Windows;
namespace TestCLR {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
new LibCLR.Class1();
}
}
}
全部重建并调试,然后遇到异常
然后我将解决方案平台更改为x64或x84,异常都是一样的。
如果我在步骤 1 中为“TestCLR”选择“WPF App (.NET Framework)”,为“LibCLR”选择“CLR Class Library(.NET Framework)”,效果会很好" 在步骤 2
为什么不起作用? 我不能在“WPF App (.NET Core)”项目中使用“CLR Class Library(.NET)”项目作为项目参考吗? 我该如何解决这个问题?
最常见的答案是在 x86 和 x64 目标之间变化。在对您的原始问题
尝试使用 OS 特定的目标框架名字对象。打开两个项目的 .csproj 文件。尝试将两个项目设置为 <TargetFramework>net5.0-windows</TargetFramework>
清理解决方案、重建并测试。
我们这里有一个依赖于 Windows 的解决方案。我们不应该有,但让我们尝试明确定位它。尤其是那个C++项目。
多读书
您应该在此处将平台目标更改为“X86”