web-dev-qa-db-ja.com

ASP.NET(MVC 4)Web API ODataプレリリースでファイルまたはアセンブリSystem.Net.Http、Version = 4.0.0.0をロードできませんでした

問題

Microsoft ASP.NET Web API ODataパッケージ5.0.0-rc1プレリリースをインストールした後、次の例外が発生します。

ファイルまたはアセンブリ「System.Web.Http、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)

私のMVC 4プロジェクトはまったく新しいもので、本当に小さく、空想的なものは何もありません。 .NET framework 4.5をターゲットにしています

これが必要です nuget package to Deltaクラスを使用してPATCHを実装 (パッケージのバージョン4.0.0.0を使用すると、Deltaクラスが機能しません)。

どうすれば修正できますか?

System.Web.Httpの私のバージョン

GACにSystem.Webのバージョン5.0.0.0があります.Http

gacutil -l System.Web.Httpグローバルアセンブリキャッシュには、System.Web.Http、Version = 5.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35、processorArchitecture = MSILのアセンブリが含まれています。

Visual Studioでアセンブリを参照すると、System.Web.Httpの特定のバージョンは4.0.0.0(なぜ?)

my projectでは、System.Web.Httpへの参照

  • バージョンあり5.0.0.0
  • パッケージの\ lib\net45 \フォルダーを指します
  • CopyLocal = trueを持っています

試したこと

Web.configでリダイレクトv 4.0.0.0を5.0.0.0にバインドしようとしました

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

しかし、別の例外があります:

メソッド「System.Web.Http.GlobalConfiguration..cctor()」によるフィールド「System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2」へのアクセスに失敗しました。

V 4.0.0.0は、コアWeb Apiエンジンで実際に使用する必要があると思います。

リンクされた質問

コード分析エラーは、MVC4 Web APIのファイルまたはアセンブリ 'System.Net.Http、Version = 2.0.0.0をロードできませんでしたファイルまたはアセンブリ' System.Net.Http、バージョンをロードできませんでした= MVC4 Web APIの2.0.0.

81
Yves M.

Visual Studio 2013には、これを処理する新しい機能があります。アプリをビルドすると、参照されているアセンブリのさまざまなバージョンに関する警告が表示されます。警告をダブルクリックして、アセンブリバインディングリダイレクトをweb.configに追加します。

http://msdn.Microsoft.com/en-us/library/2fc472t2.aspx を参照してください。

jeff.eynonは、VSにファイルを自動的に編集させるには、web.configをチェックアウトする必要がある(TFSソース管理を使用している場合)ことを以下に示します。ヒントをありがとう!

163
Jay Douglass

Nugetを使用してWebApiパッケージをプレリリースバージョンにアップグレードすることで機能させました。

PM> Microsoft.AspNet.WebApi -Pre

WebApiの最新バージョンを使用してプロジェクトを強制するには、ルートWeb.configにいくつかの変更が必要でした。

1)2.0.0.0から3.0.0.0のWebページバージョン

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

2)System.Web.HttpおよびSystem.Net.Http.Formattingの5.0.0.0へのリダイレクトのバインド

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

それだと思う

PS: WebAPI OData 5.0 Betaから非常にヒントを得たソリューション-GlobalConfigurationにアクセスするとセキュリティエラーがスローされる

39
Yves M.

プロジェクトテンプレートからホットタオルプロジェクトを更新しようとしたとき、および2013年10月23日の時点でVS 2012で空のプロジェクトを作成し、nuget経由でHotTowelをインストールしたときに、この問題が発生しました。

修正するために、Nugetを介してWeb Api WebホストおよびWeb APIパッケージを5.0に更新しました。これは、現時点(2013年10月23日)のNuGetの現在のバージョンです。

次に、バインディングダイレクトを追加しました。

<dependentAssembly>
  <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
11
klabranche

私は同じ問題に出会い、次のライブラリのCopyLocalをtrueに設定することで解決しました。

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

MVC4とNET 4を使用することを追加する必要があります

11
Bronek

または、NuGet Package Manager Consoleからこれを行うことができます

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

そして、System.Web.Http.WebHost 5.0への参照を追加できるようになります

8
Sameer

参照からSystem.Web.HttpおよびSystem.Net.Http.Formattingを削除し、binフォルダー(nugetによってコピーされた場所)を参照して参照を追加します。ファイルバージョンには5.0.0.0と表示されます。

4
JJ_Coder4Hire

私は同じエラーに直面しました。 Unity Framework for Dependency Injectionをインストールすると、HttpおよびHttpFormatterの新しい参照が構成に追加されました。だからここに私が従った手順があります。

NuGetパッケージマネージャーコンソールで次のコマンドを実行しました:PM> Install-Package Microsoft.ASPNet.WebAPI -pre

そして、バージョン5.0でdllへの物理参照を追加しました

このエラーは、いくつかの異なるプロジェクトで数回発生しました。

最後にわかったのは、ビルドするときに、binフォルダーにsystem.web.mvcバイナリアセンブリのコピーが既にあるということです。

これを修正するには、参照リストでアセンブリを右クリックし、「プロパティ」を選択します。 「バージョン」プロパティを見て、これが最新バージョンかどうかを確認します。そうである場合、「ローカルコピー」をtrueに切り替えます。

これにより、プロジェクトで参照されているバージョンが、最終的にバイナリフォルダーにあるバージョンになります。

それでもエラーが発生する場合は、nuGetを実行して最新バージョンを取得してから、上記の手順を再度実行してください。

幸運-このエラーは苦痛です!

1
user1628627

私は方法で解決します。最初にnugetをインストールします。 2番目に使用します。
図は次のとおりです。 

3番目:「Version」プロパティを見て、これが最新バージョンかどうかを確認します。

最後に、プロジェクトが最新バージョンであることを再度確認します。

1

同じ種類の問題に直面し、以下の手順に従って問題を解決しました

[ツール]-> [ライブラリパッケージマネージャー]-> [パッケージマネージャーコンソール]に移動し、以下のコマンドを実行します

インストールパッケージMicrosoft.ASPNet.WebAPI -pre

0
Santu Ghosh

Nugetパッケージマネージャーにアクセスして、パッケージを更新しました。今では動作します。私が更新した主なものは、Microsoft.AspNet.WebApi.Coreです。適切な参照を同期するには、両方のプロジェクトでこれを行う必要がある場合があります。

0
Exzile

上記のようにWeb.configファイルの参照を変更した後、参照を解決しました。

私は同様の問題に直面していました。

プログラムファイルからMicrosoft.Data.Edm.dllおよびOData.dllおよびその他のアセンブリを参照します。

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                          \bin\.NETFramework\Microsoft.Data.Edm.dll

そして

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                        \bin\.NETFramework\Microsoft.Data.OData.dll

バージョンは5.6.4でした。

両方のアセンブリの参照をC:\....Project\packages\Microsoft.Data.Edm.5.6.0に変更すると、問題は解決しました

0
Gaurav Gupta

この問題が発生した場合は、以下のセクションでweb.configを確認してください

以下のセクションでは、使用されている特定のdllのバージョンを示します

web.configのこのセクションを確認した後、ソリューションエクスプローラーを開き、図に示すようにプロジェクトツリーから参照を選択します。 ソリューションエクスプローラー->参照

参照を展開した後、エラーの原因となったdllを見つけます。 dll参照を右クリックして、上の画像に示すようなバージョンを確認します。

Config dllバージョンと参照されるdllの両方が異なる場合、この例外が発生します。両方が同じバージョンであることを確認してください。

0
user3235808