web-dev-qa-db-ja.com

実行のために参照アセンブリをロードできません

突然私のウェブサイトが読み込まれず、以下のエラーが表示されます。 Windows 10 Homeで.Net Framework 4.7.1を使用してVS2017を実行しています。

[BadImageFormatException: Cannot load a reference Assembly for execution.]

[BadImageFormatException: Could not load file or Assembly 'System.IO.Compression.ZipFile' or one of its dependencies. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)]
   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.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +225
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +110
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +22
   System.Reflection.Assembly.Load(String assemblyString) +34
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +48

[ConfigurationErrorsException: Could not load file or Assembly 'System.IO.Compression.ZipFile' or one of its dependencies. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +729
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +247
   System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +157
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +226
   System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +73
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +321
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +170
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +734

[HttpException (0x80004005): Could not load file or Assembly 'System.IO.Compression.ZipFile' or one of its dependencies. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +525
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +118
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +708

助言がありますか?

22
Krunal

新しいインスタンスを作成し、すべてのカスタマイズを移行する以外、これに対する解決策はありません。このようなエラーはランダムであり、追跡または解決が困難です。

1
Krunal

私のために働いたのは、私のウェブアプリの下のbinとobjディレクトリを削除してから再構築することでした。

33
VG8TS

この点で.NET Framework 4.7.1に既知の問題があります 。 4.7.2でソートされたと思われますが、その間に何ができるでしょうか?

この問題は、シリアル化アセンブリに関連しています。オプションで、ビルドの一部として生成するかどうかを設定できます(rclickプロジェクト->プロパティ->ビルドタブ->下部の「シリアル化アセンブリの生成」を参照)。

私のために働いたのは-そして私はここで他の人の肩に立っています-この設定が「自動」に設定されていることを確認することです完全な「クリーンなソリューション」を実行します。さらに偏執的な場合は、このPowerShellスニペットをソリューションルートフォルダーで実行すると便利です。

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

次に、次のターゲットをcsprojに追加します(囲んでいる<Project> 鬼ごっこ:

<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
    <ItemGroup>
      <ReferencePath Remove="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." />
  </Target>
  <Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
    <ItemGroup>
      <ReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has run." />
  </Target>

それでもうまくいかない場合は、「シリアル化アセンブリの生成」を明示的に「オン」に設定して、生成を強制し、再ビルドして実行します。

5
oflahero

今日、Acumatica 2018 R1をインストールしましたが、この問題に遭遇しました。 System.IO.Compression.ZipFileをbinフォルダーから削除すると、問題が修正されました。

私はエラーについていくつかの研究をしています

エラーからわかるように、AspnetcoreプロジェクトでSOAPベースのプロジェクトを参照する場合、それらを直接使用することはできません。これは、Aspnetcoreプラットフォームの実装が原因です。

reflection を使用してロードできます。ただし、内部型を動的に使用できます。 ライセンス soapアセンブリなどのAspnetcoreの以降のバージョンでサポートがリリースされる可能性があります。

Binフォルダーなどを削除することは、dllバージョンがX86または64などと異なる場合の解決策です。実際の問題は、SOAPプロトコル、WebSocket、プロキシなどの実装です。Aspnetcoreで直接使用できませんプロジェクト。githubには patch プロジェクトがあります

0
Hamit YILDIRIM