我在c#中有一个使用c ++库和一些dll的项目。当我运行它时效果很好。
库是Awesomium,包含c ++库和c#包装器
当我从ASP.NET MVC 4项目创建对此项目的引用时,出现以下错误:
异常详细信息:System.BadImageFormatException:无法加载文件或程序集'file:/// D:\ Projects \ Development \ ProGamers \ GamingSite \ bin \ avcodec-52.dll'或其依赖项之一。该模块应该包含一个程序集清单。
我尝试过的事情:
处理dll,但它仍然不起作用(文件存在)。
在GAC中注册但我在那里遇到了同样的错误。
确保使用.NET Framework 4.0(而非客户端配置文件)
Change the platform of the solution到AnyCPU /混合平台。
堆栈追踪:
[BadImageFormatException: Could not load file or assembly 'file:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll' or one of its dependencies. The module was expected to contain an assembly manifest.]
System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +34
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152
System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark) +102
System.Reflection.Assembly.LoadFrom(String assemblyFile) +34
WebActivator.ActivationManager.Run() +190
[InvalidOperationException: The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message: Could not load file or assembly 'file:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll' or one of its dependencies. The module was expected to contain an assembly manifest..]
System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures) +550
System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +132
System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath) +90
System.Web.Compilation.BuildManager.ExecutePreAppStart() +135
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +516
[HttpException (0x80004005): The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message: Could not load file or assembly 'file:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll' or one of its dependencies. The module was expected to contain an assembly manifest..]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9850940
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +456
答案 0 :(得分:39)
我发现,我在目标.NET Framework中使用了不同的InstallUtil。我正在构建.NET Framework 4.5,同时如果我使用的是.NET Framework 2.0版本,则会出现错误。为我的目标.NET Framework使用正确的InstallUtil,解决了这个问题!
答案 1 :(得分:10)
BadImageFormatException
几乎总是与x86与x64编译的程序集有关。听起来你的C ++程序集是为x86编译的,你在x64进程上运行。这是对的吗?
而不是使用AnyCPU/Mixed
作为平台。尝试手动将其设置为x86
并查看它是否会在此之后运行。
希望这有帮助。
答案 2 :(得分:1)
我发现了另一个奇怪的原因,我想也许另一个开发人员对我很困惑。我确实运行了install.bat,用于在VS2010的开发人员命令提示符中安装我的服务,但我的服务是在VS2012中生成的。它出现了这个错误,让我发疯,但我尝试 VS2012开发人员命令提示工具,一切都没问题。我不是没有原因但我的问题已经解决了。所以你可以测试它,如果有人知道原因,请与我们分享。感谢。
答案 3 :(得分:1)
检查清单是否是有效的xml文件。通过在构建结束时执行DOS复制命令我遇到了同样的问题,事实证明,由于某种原因,我无法理解“复制”是在清单文件的末尾添加了一个奇怪的字符( - >) 。通过添加“/ b”开关来强制二进制复制来解决问题。
答案 4 :(得分:1)
首先尝试使用ILSpy等反编译器打开文件,你的dll可能已损坏。我在一个在线网站上遇到这个错误,当我下载dll并尝试打开它时,它已损坏,可能在通过ftp上传时出现了一些错误。
答案 5 :(得分:0)
在以下情况下出现错误:
我只是避免了混淆,错误消失了。 不是一个真正的解决方案,但至少我知道是什么原因造成的...
答案 6 :(得分:0)
就我而言,我使用的是InstallUtil.exe
,这会导致错误。以窗口最佳方式安装。Net Core
服务,以使用sc
命令。
更多信息,请点击Exe installation throwing error The module was expected to contain an assembly manifest .Net Core
答案 7 :(得分:0)
删除 .InstallState 文件并重新安装服务为我修复了它。