2012-09-01 23 views
27

私はC++でライブラリといくつかのDLLを使用するプロジェクトを持っています。私はそれを実行すると素晴らしい動作します。モジュールにアセンブリマニフェストが含まれていると予想されました

例外の詳細:

ライブラリがAwesomiumで、両方のライブラリとC#ラッパー

私は私のASP.NET MVC 4プロジェクトからこのプロジェクトへの参照を作成するときに、私は次のエラーを取得するC++含まれています。 System.BadImageFormatException:ファイルまたはアセンブリ 'file:/// D:\ Projects \ Development \ ProGamers \ GamingSite \ bin \ avcodec-52.dll'またはその依存関係の1つを読み込めませんでした。モジュールにアセンブリマニフェストが含まれていることが予想されました。私が試した

もの:

  1. (ファイルが存在する)のdllを対処が、それはまだ動作しません。

  2. GACに登録していますが、同じエラーが表示されています。

  3. 2 files with the same dll/exe name causing conflictの.NET Framework 4.0(およびないクライアントプロファイル)を使用していることを確認します - 私はそれを持っていけません。

  4. Change the platform of the solution 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 
+0

[アセンブリバインディングログビューア](http://msdn.microsoft.com/en-us/library/e74a18c4.aspx)でバインドからログを取得できますか?最初にすべてのバインドをログに設定するように設定してください。 – rene

+0

Assembly.LoadFrom()は、avcodec-52.dllのようなDLLでは動作できません。これは.NETアセンブリではありません。スニペットを投稿しないと、コードがこのように読み込もうとしている理由は完全には不明です。 –

+0

Hans私はアセンブリを手動で使用しなかったし、コンソールアプリケーションでうまくいきました。それは、私がASP.NETアプリケーションから参照するときにのみ問題を引き起こします。 私が行っている唯一の使用は、Awesomium dllを参照することです。 http://awesomium.com –

答えて

7

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

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

これが役に立ちます。

+1

私のマシンはx86で、C++アセンブリはおそらくx86でもあります。 私は両方のプロジェクトを手動でx86に設定しようとしましたが、動作しませんでした。 –

+0

これで問題が解決しました。どうやら、私のアセンブリはx86用にコンパイルされていて、x64プロジェクトでコンパイルされていることは分かりませんでした。 –

33

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

1

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

1

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

1

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

関連する問題