web-dev-qa-db-ja.com

Microsoft.Owin.Corsを呼び出した後、System.Web.Corsアセンブリを読み込めません

System.Web.Corsソリューションエクスプローラーでのアセンブリ参照、Version5.2.3.です。 Specific VersionプロパティはFalseに設定されます。パスは、ローカルプロジェクトのbinフォルダーです。ファイルエクスプローラーから.dllプロパティをチェックするとき、ファイルの製品バージョンとファイルバージョン。また、5.2.です。

Web.config

<dependentAssembly>
    <assemblyIdentity name="System.Web.Cors" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

私のpackages.config(面倒なアセンブリはMicrosoft.AspNet.WebApi.Cors、しかし、私は同じような名前の別のものをここに含めた:

<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />

Startup.csのこの行にエラーがスローされます

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

完全なエラーは次のとおりです。

System.IO.FileLoadException was unhandled by user code
  FileName=System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
  FusionLog==== Pre-bind state information ===
LOG: DisplayName = System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 (Fully-specified)
LOG: Appbase = file:///P:/project-z4a/project-z4a/
LOG: Initial PrivatePath = P:\project-z4a\project-z4a\bin
Calling Assembly : Microsoft.Owin.Cors, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: P:\project-z4a\project-z4a\web.config
LOG: Using Host configuration file: D:\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///P:/project-z4a/project-z4a/bin/System.Web.Cors.DLL.
WRN: Comparing the Assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of Assembly (hr = 0x80131040). Probing terminated.

  HResult=-2146234304
  Message=Could not load file or Assembly 'System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)
  Source=Microsoft.Owin.Cors
  StackTrace:
       at Microsoft.Owin.Cors.CorsOptions.get_AllowAll()
       at z4a_dsa.Startup.Configuration(IAppBuilder app) in P:\project-z4a\project-z4a\Startup.cs:line 23
  InnerException: 

したがって、v5.0.0.0が期待されていることはわかりますが、どこで、またはなぜこのバージョンを呼び出すのかわかりません。

このエラーをデバッグするには、次の手順を実行しました。リストされている各試行の後、プロジェクトをクリーンアップしてから再ビルドしました。これらの各手順を試してもエラーは変わりません。

  • Update-Package
  • Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors、次にInstall-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors、次にInstall-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.3
  • ダウングレードMicrosoft.AspNet.WebApi.Corsからv5.0.0.0パッケージマネージャーウィンドウ経由。

私はまだ.NETの専門家ではありません。また、Web Apiチェック。そして、z4a-foundation-scaffold-authプロジェクトにパッケージ化します。ここでの私の知識のギャップについてのいくつかの説明を間違いなく感謝します!

[〜#〜] edit [〜#〜]:ILDASM.exeを使用してMicrosoft.Owin.Corsアセンブリ。指定されたSystem.Web.Cors v5.0.0.0そのマニフェスト定義。私の質問はこれをどのように改善するかです。

18
Caleb Faruki

System.Web.Cors.dllMicrosoft.AspNet.WebApi.Corsパッケージからのものではないことが判明しました。 Microsoft.AspNet.Corsパッケージに由来します。

Install-Package Microsoft.AspNet.Cors -Version 5.0.0

これにより、即時エラーが解決されました。

System.Web.Cors.dllの2つの異なるバージョンが必要なシナリオがある場合、このソリューションをお勧めします。

  1. パッケージマネージャーを使用して、Microsoft.AspNet.Corsのバージョンをマニフェスト定義でMicrosoft.Owin.Corsが要求するバージョンに変更します。
  2. Visual Studioの開発者コマンドプロンプト(管理者として実行)を使用して、* System.Web.Cors.dll **が存在する、新しくバージョン管理されたMicrosoft.AspNet.Corsのパッケージフォルダーに移動します。
  3. 次のコマンドを実行します:gacutil -i System.Web.Cors.dll
  4. パッケージマネージャーに戻り、Microsoft.AspNet.Corsを元のバージョンに戻します。

このメソッドは、目的のバージョンの.dllファイルをソリューションのパッケージフォルダーにプルするだけです。次に、gacutil.exeを使用して、このバージョンの.dllをグローバルアセンブリキャッシュに追加します。 Visual Studioは、最初にGACで目的の.dllバージョンをプローブし、次にローカルプロジェクトでプローブします。

29
Caleb Faruki

このコマンドを実行してPM(パッケージマネージャー)

インストールパッケージMicrosoft.AspNet.Cors-バージョン5.2.3.0

2
virender