7

私は 64 ビットのみの Web アプリケーション ( AssemblyA) を構築しており、これも 64 ビットのみの別のアプリケーション ( ) を参照していますAssemblyB

AssemblyBで参照として追加するとAssemblyA、Visual Studio で次のコンパイル エラーが発生します。

ASPNETCOMPILER ファイルまたはアセンブリ 'AssemblyB' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。

私のアプリケーションのプラットフォーム ターゲット設定はx64両方とも に設定されており、ターゲット フレームワーク設定は両方とも.Net Framework 4.6Prefer 32bit is uncheckedです。

すべての依存参照のバージョンが同じであることを確認して、AssemblyBinのすべての依存参照を参照しようとしました。AssemblyA

この質問を使用しました: .NET アセンブリが x86 または x64 用にビルドされたかどうかを確認するにはどうすればよいですか? 参照されているすべてのアセンブリがMSILまたはであることを確認しますAMD64

aspnet_compiler.exeオプションを有効にしてコマンド ライン ツールを使用したerrorstackところ、次のスタック トレースが得られました。

[BadImageFormatException]: ファイルまたはアセンブリ 'AssemblyB' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。

System.Reflection.RuntimeAssembly._nLoad (AssemblyName fileName、文字列 codeBase、エビデンス assemblySecurity、RuntimeAssembly locationHint、StackCrawlMark& stackMark、IntPtr pPrivHostBinder、ブール型 throwOnFileNotFound、ブール型 forIntro spection、ブール型 suppressSecurityChecks) で

System.Reflection.RuntimeAssembly.nLoad (AssemblyName fileName、String code Base、Evidence assemblySecurity、RuntimeAssembly locationHint、StackCrawlMark& s tackMark、IntPtr pPrivHostBinder、ブール値 throwOnFileNotFound、ブール値 forIntros pection、ブール値を抑制する SecurityChecks) で

System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef、Evidence assemblySecurity、RuntimeAssembly reqAssembly、StackCrawlMark &stackMark、IntPtr pPrivHostBinder、ブール値 throwOnFileNotFound、ブール値 forIntrospection、ブール値 suppressSecurityChecks) で

System.Reflection.RuntimeAssembly.InternalLoad (文字列 assemblyString、証拠 assemblySecurity、StackCrawlMark &stackMark、IntPtr pPrivHostBinder、Boolean forIntrospection) で

System.Reflection.RuntimeAssembly.InternalLoad (文字列 assemblyString、証拠 assemblySecurity、StackCrawlMark &stackMark、Boolean forIntrospection) で

System.Reflection.Assembly.Load (文字列 assemblyString) で

System.Web.Configuration.CompilationSection.LoadAssemblyHelper (文字列 assemblyName、ブール値 starDirective) で

[ConfigurationErrorsException]: ファイルまたはアセンブリ 'AssemblyB' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。

System.Web.Configuration.CompilationSection.LoadAssemblyHelper (文字列 assemblyName、ブール値 starDirective) で

System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomain BinDirectory () で

System.Web.Configuration.CompilationSection.LoadAssembly (AssemblyInfo ai) で

System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) で

System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() で

System.Web.Compilation.BuildManager.CallPreStartInitMethods (文字列 preStartInitListPath、ブール値 & isRefAssemblyLoaded) で

System.Web.Compilation.BuildManager.ExecutePreAppStart() で

System.Web.Hosting.HostingEnvironment.Initialize (ApplicationManager appManager、IApplicationHost appHost、IConfigMapPathFactory configMapPathFactory、ホスティング ingEnvironmentParameters、hostingParameters、PolicyLevel policyLevel、例外 appDomainCreationException) で

次の関連する質問を見ましたが、この質問に答えるものはありません。ほとんどはIIS構成に関連していますが、これはコンパイルエラーであるためそうではありません。または、私の場合には適していない32ビットプラットフォームターゲットを許可するようにプロジェクトを設定するという解決策があります。

私はここからどこへ行くべきか途方に暮れています。繰り返しますが、どちらのプロジェクトも 32 ビットに設定したくありません。これはコンパイル エラーであるため、IIS 構成の問題ではありません。

また、いくつかの異なるマシンと新しいアプリケーションで試してみましたが、同じ結果が得られました。

このコンパイル エラーを修正するにはどうすればよいですか?

4

1 に答える 1