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.

先说说我是怎么做到的

  1. 创建“WPF App (.NET)”项目“TestCLR”

  2. 在此解决方案中添加一个新的“CLR Class Library(.NET Core)”项目“LibCLR”

  3. “LibCLR”的“公共语言运行时支持”设置

  4. 将“TestCLR”定位到“.NET 5.0”

  5. "LibCLR.h" 在项目“LibCLR”中自动创建,代码在里面

#pragma once

using namespace System;

namespace LibCLR {
    public ref class Class1
    {
        // TODO: Add your methods for this class here.
    };
}
  1. 添加“新 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();
        }
    }
}
  1. 全部重建并调试,然后遇到异常

  2. 然后我将解决方案平台更改为x64或x84,异常都是一样的。

  3. 如果我在步骤 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”