You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.7转ASP.NET Core 6后C#调用C++ DLL遇BadImageFormatException

解决.NET Core 6.0中引用C++/CLI DLL的BadImageFormatException问题

问题概述

将多项目从.NET 4.7升级至ASP.NET Core 6.0后,引用C++/CLI编译的DLL时出现以下错误:

System.BadImageFormatException: 'Could not load file or assembly 'Tradante.MT4.Wrapper, Version=1.0.8369.22669, Culture=neutral, PublicKeyToken=null'. Format of the executable (.exe) or library (.dll) is invalid.'

排查架构兼容问题后无效,且Web应用强制设置x64编译后,启用原生调试时仍标注(Win32),疑似架构未生效。

解决步骤

1. 严格对齐C++/CLI项目与Web应用的架构配置

即使表面设置一致,仍需检查C++项目的深层配置:

  • 右键C++项目 → 属性 → 配置属性 → 常规:
    • 确认平台工具集为v143或更高版本(需支持.NET Core)
    • 目标框架选择net6.0-windows(C++/CLI在.NET Core下依赖Windows目标框架)
  • 配置属性 → 高级:
    • 目标架构设置为与Web应用完全一致的x64(或x86,不可交叉)
    • 确认CLR支持已设置为clr:netcore

2. 强制Web应用架构设置生效

消除(Win32)标注的关键操作:

  • 右键Web应用 → 属性 → 生成:
    • 平台目标选择x64,取消勾选"首选32位"(该选项默认勾选会强制x86运行)
  • 编辑Web应用的.csproj文件,添加强制配置:
    <PropertyGroup>
      <PlatformTarget>x64</PlatformTarget>
      <Prefer32Bit>false</Prefer32Bit>
    </PropertyGroup>
    
  • 清理解决方案,删除所有bin/obj目录后重新编译

3. 确保DLL引用路径正确

  • 避免手动复制DLL,直接添加C++项目的项目引用,确保编译时自动将对应架构的DLL复制到Web应用输出目录
  • 检查Web应用的输出目录,确认存在的是x64版本的C++ DLL,而非旧的x86版本

4. 调试配置校验

启用原生代码调试时,确认以下设置:

  • 右键Web应用 → 属性 → 调试:
    • 调试器类型选择混合(托管和原生)
    • 确认目标架构为x64
  • 打开解决方案的配置管理器,确保所有项目的活动解决方案平台统一为x64,且每个项目的平台设置与活动平台匹配

内容的提问来源于stack exchange,提问作者Lorenzo Vettori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:31:36