私は 64 ビットのみの Web アプリケーション ( AssemblyA
) を構築しており、これも 64 ビットのみの別のアプリケーション ( ) を参照していますAssemblyB
。
AssemblyB
で参照として追加するとAssemblyA
、Visual Studio で次のコンパイル エラーが発生します。
ASPNETCOMPILER ファイルまたはアセンブリ 'AssemblyB' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。
私のアプリケーションのプラットフォーム ターゲット設定はx64
両方とも に設定されており、ターゲット フレームワーク設定は両方とも.Net Framework 4.6
とPrefer 32bit is unchecked
です。
すべての依存参照のバージョンが同じであることを確認して、AssemblyB
inのすべての依存参照を参照しようとしました。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ビットプラットフォームターゲットを許可するようにプロジェクトを設定するという解決策があります。
- プラットフォームが同じ場合でも、「正しくない形式のプログラムを読み込もうとしました」 (IIS 構成を使用するのは良くありません)
- ファイルまたはアセンブリを読み込めませんでした ... 不正な形式のプログラムを読み込もうとしました (System.BadImageFormatException) (実行時エラーのため、適切ではありません)
- System.BadImageFormatException 不正な形式のプログラムをロードしようとしました(32 ビット ソリューションを使用しているため、適切ではありません) 。
- ファイルまたはアセンブリ 'xxx' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました(32 ビット ソリューションを使用しているため、適切ではありません) 。
私はここからどこへ行くべきか途方に暮れています。繰り返しますが、どちらのプロジェクトも 32 ビットに設定したくありません。これはコンパイル エラーであるため、IIS 構成の問題ではありません。
また、いくつかの異なるマシンと新しいアプリケーションで試してみましたが、同じ結果が得られました。
このコンパイル エラーを修正するにはどうすればよいですか?