web-dev-qa-db-ja.com

モジュールには、アセンブリマニフェストが含まれることが期待されていました

C++ライブラリといくつかのdllを使用するC#のプロジェクトがあります。実行すると、うまく機能します。

ライブラリは Awesomium で、c ++ライブラリとc#ラッパーの両方が含まれています

ASP.NET MVC 4プロジェクトからこのプロジェクトへの参照を作成すると、次のエラーが発生します。

例外の詳細:System.BadImageFormatException:ファイルまたはアセンブリ 'file:/// D:\ Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll'またはその依存関係の1つを読み込めませんでした。モジュールには、アセンブリマニフェストが含まれることが期待されていました。

私が試したこと:

  1. Dllをコピーしますが、まだ機能しません(ファイルは存在します)。

  2. GACに登録しましたが、同じエラーが発生しました。

  3. .NET Framework 4.0を使用してください(クライアントプロファイルではありません)

  4. 競合を引き起こす同じdll/exe名の2つのファイル -私はそれを持っていません。

  5. ソリューションのプラットフォームを変更 AnyCPU/Mixed Platformsに変更します。

スタックトレース:

[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
38
Aviran Cohen

ターゲットの.NET Frameworkとは異なるInstallUtilを使用していることがわかりました。 .NET Framework 4.5を作成していますが、.NET Framework 2.0リリースを使用している場合にエラーが発生しました。ターゲット.NET Frameworkに適切なInstallUtilを使用して、この問題を解決しました!

40
swdev

BadImageFormatExceptionは、私の経験では、ほとんど常にx86とx64のコンパイル済みアセンブリで実行されます。 C++アセンブリがx86用にコンパイルされており、x64プロセスで実行しているようです。あれは正しいですか?

AnyCPU/Mixedをプラットフォームとして使用する代わりに。手動でx86に設定し、その後実行されるかどうかを確認してください。

お役に立てれば。

11
Davin Tryon

ILSpyなどの逆コンパイラでファイルを開こうとすると、dllが破損している可能性があります。オンラインWebサイトでこのエラーが発生しました。dllをダウンロードして開こうとすると、破損していたため、ftp経由でアップロード中に何らかのエラーが発生しました。

1
BornToCode

別の奇妙な理由を見つけたので、別の開発者が私と混同しているのではないかと思った。 VS2010のdeveloperコマンドプロンプトにサービスをインストールするために作成したinstall.batを実行しました VS2012でサービスが生成されました。それはこのエラーになり、私を夢中にさせますが、VS2012 Developer Command Promptツールとすべてがうまくいった。理由はわかりませんが、問題は解決しました。そのため、あなたはそれをテストすることができ、誰かがその理由を知っているなら、私たちと共有してください。ありがとう。

1
QMaster

マニフェストが有効なxmlファイルであるかどうかを確認してください。ビルドの最後にDOSコピーコマンドを実行しても同じ問題が発生しましたが、何らかの理由で、「コピー」がマニフェストファイルの最後に奇妙な文字(->)を追加していたことがわかりません。この問題は、「/ b」スイッチを追加してバイナリコピーを強制することで解決しました。

1
Pandele Florin

次の場合にエラーが発生しました。

  1. .NET EXEファイル(#1)は別の.NET EXEファイル(#2)を参照していました
  2. EXE#2を Themida で難読化しようとしていました
  3. eXE#1を実行すると、エラーでクラッシュしました。「モジュールにはアセンブリマニフェストが含まれているはずです」

私は単純に難読化を回避し、エラーはなくなりました。実際の解決策ではありませんが、少なくとも私はそれが原因を知っています...

0
itsho