在将Target Framework更改为.net框架4之后,我有一个运行时异常:发生了'System.BadImageFormatException'类型的第一次机会异常
使用目标框架3.5构建时,一切正常.
我正在构建的平台是x86(我发现建设到x64晚上会导致问题).
可能是什么问题?
Gra*_*mas 23
MSDN列出了可能的原因,因此我建议将其作为清单运行:
尝试加载非托管动态链接库或可执行文件(如Windows系统DLL),就像它是.NET Framework程序集一样.
DLL或可执行文件作为64位程序集加载,但它包含32位功能或资源.例如,它依赖于COM互操作或调用32位动态链接库中的方法.
我们的想法是确保所有项目和依赖项都被编译为针对相同的框架版本或以前的版本; 并且你的每个项目在比特性方面是兼容的; 如果您正在动态加载库,请确保加载它们的属性(即不要尝试将本机库作为托管程序集加载.)
也许添加一些关于项目配置/依赖关系的更多信息将使我们更具决定性.
And*_*tan 15
确保解决方案中的所有项目都构建到x86或x64或Any Cpu- 任何不匹配都可能导致此问题.
同样,如果您使用任何第三方库 - 也请查看他们的目标平台.
另一件需要考虑的事情是它是否在IIS中托管 - 在这种情况下,您必须确保程序集的位数与IIS托管进程的位数相匹配.如果您使用的是x64计算机,则可能是x64(除非已启用32位主机).
我不得不说我通常不会偏离,Any CPU除非我对COM组件有外部依赖x86或者x64只有.它几乎总是会引起头痛.
我今天遇到了这个确切的问题,BadImageFormatException只有当我将目标框架更改为 > 3.5 时才会发生。关于此异常的所有其他答案都在谈论我们的程序集的位数(32 对 64)(这是一个常见问题,但不适用于这种情况)。
如果项目在针对 .NET 3.5 构建时运行良好,并在 .NET 4.0 或更高版本上抛出 BadImageFormatException,那么一定要检查您的 App.config 文件中的 supportedRuntime 元素。我的是这样说的:
<supportedRuntime version="v2.0.50727" sku="Client" />
Run Code Online (Sandbox Code Playgroud)
这将强制您的程序在 .NET 2.0 运行时上运行,它无法加载 .NET 4.0 图像(但它可以加载 .NET 3.5 图像)。当切换到高于 3.5 的框架版本时,任何表示应该删除的行。
如果您的项目第一次运行并且在更改目标框架后发生此错误,则还可能意味着Visual Studio在构建中执行了一些更改,并且您的某些库不再兼容.
因此,请尝试浏览Build配置.
大多数情况下这将有所帮助: 转到应用程序属性>构建>勾选'首选32位'
| 归档时间: |
|
| 查看次数: |
47761 次 |
| 最近记录: |