无法加载文件或程序集 X 或其依赖项之一。不是有效的Win32应用程序。 (HRESULT:0x800700C1)
Posted
技术标签:
【中文标题】无法加载文件或程序集 X 或其依赖项之一。不是有效的Win32应用程序。 (HRESULT:0x800700C1)【英文标题】:Could not load file or assembly X or one of its dependencies. is not a valid Win32 application. (HRESULT: 0x800700C1) 【发布时间】:2014-10-12 10:30:09 【问题描述】:操作系统:Windows 8.1 64
我尝试使用 DirectX 在 VB.Net 中播放多个声音,我的代码中没有错误。 问题是每当触发事件时,我都会收到此错误
System.BadImageFormatException 未处理 消息:未处理 “System.BadImageFormatException”类型的异常发生在 System.Windows.Forms.dll 附加信息:无法加载文件 或程序集“Microsoft.DirectX.AudioVideoPlayback.dll”或其之一 依赖关系。不是有效的Win32应用程序。 (例外来自 HRESULT: 0x800700C1)
然后我将 Target CPU 设置为 x86,我得到了这个错误
System.IO.FileLoadException 未处理 消息:未处理 “System.IO.FileLoadException”类型的异常发生在 System.Windows.Forms.dll 附加信息:混合模式程序集 是针对运行时的“v1.1.4322”版本构建的,不能 在 4.0 运行时加载,无需额外配置 信息。
到目前为止,我已经尝试卸载-重新安装 DirectX SDK,安装与 DirectX 和不同声音文件 (.wav) 有关的所有内容。
此外,我必须浏览加载 .dll,在 Reference Manager>Assemblies 下找不到它们,但现在我什至无法通过浏览加载它们,所以我使用 Imports Microsoft.DirectX.AudioVideoPlayback
它会让我导入其余的 .dll,除了(参考管理器甚至不会打开它们):
Microsoft.DirectX.AudioVideoPlayback.dll
Microsoft.DirectX.dll
Microsoft.DirectX.DirectSound.dll
我需要的那些。有没有办法清理重新安装它们?
目标框架:.Net Framework 4.5
代码:
Dim MySound1 As New Microsoft.DirectX.AudioVideoPlayback.Audio("D:\path\sound_file.mp3")
MySound1.Play()
如果您还需要了解其他信息,请告诉我。
更新:
我将Target Framework
更改为.Net Framework 3.5
,它工作正常,但前提是CPU Target
设置为x86
!这是为什么呢?
【问题讨论】:
对我来说图像不好,可能是声音文件。您是否尝试使用其他声音文件。或者我尝试使用 .wavBadImageFormatException
通常是 32 位/64 位问题。您引用的 DirectX 库是否与您的应用程序相同?
尝试了一个 .wav 文件 - 没有工作。我将目标 CPU 设置为 x86,现在出现此错误:"System.IO.FileLoadException was unhandled Message: An unhandled exception of type 'System.IO.FileLoadException' occurred in System.Windows.Forms.dll附加信息:混合模式程序集是针对运行时版本“v1.1.4322”构建的,如果没有附加配置信息,则无法在 4.0 运行时中加载。”
我将Target Framework
更改为.Net Framework 3.5
,它工作正常,但前提是CPU Target
设置为x86
!这是为什么呢?
有关旧版托管 DirectX 1.1 程序集的状态和限制的详细信息,请参阅 this 帖子。
【参考方案1】:
您正在使用旧的 Managed DirectX 包装器。目标是在 .NET 1.1 上运行,这是一个从不支持 64 位代码的框架版本。这些包装器很久以前就被弃用了,2.0 版本从未退出测试版。
需要将 EXE 的平台目标更改为 x86,没有 64 位版本的托管 DirectX,并且 DLL 包含用托管 C++ 编写的本机 32 位代码。此外,如果您的目标是 .NET 4.0 或更高版本,那么您必须使用一个 .config 文件,该文件表明可以加载这样一个期望本机代码在 .NET 1.1 上良好运行的古老程序集。它应该是这样的:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
useLegacyV2RuntimeActivationPolicy 属性抑制了您收到的错误消息。它是否真的可以在 4.0+ 上运行还不是很清楚,没有人再使用这些包装器了。通常的建议是改用 SharpDX 或 SlimDX。
【讨论】:
.config 文件不起作用我收到另一个错误“HResult=-2146232799”关于混合程序集。我想我会切换到 SharpDX。谢谢。以上是关于无法加载文件或程序集 X 或其依赖项之一。不是有效的Win32应用程序。 (HRESULT:0x800700C1)的主要内容,如果未能解决你的问题,请参考以下文章
无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝
无法加载文件或程序集“CefSharp.dll”或其依赖项之一
BadImageFormatException 无法加载文件或程序集或其依赖项之一。试图加载格式不正确的程序