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


81

問題

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)

私のMVC4プロジェクトは真新しく、本当に小さく、派手なものは何もありません。.NET Framework4.5をターゲットにしています

私はこの必要nugetパッケージをするデルタクラスを使用してパッチを実装する (私は、デルタクラスが機能していないパッケージのバージョン4.0.0.0を使用する場合)。

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

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

GAC Iバージョン持っ5.0.0.0 System.Web.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(なぜ?)

では私のプロジェクト、System.Web.Httpへの参照

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

私が試したこと

Web.configでリダイレクトv4.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」へのアクセスに失敗しました。

v4.0.0.0は本当にコアWebApiエンジンで使用する必要があると思います。

リンクされた質問

コード分​​析エラーファイルまたはアセンブリを読み込めませんでした 'System.Net.Http、Version = 2.0.0.0 in MVC4 WebAPI ファイルまたはアセンブリを読み込めませんでした' System.Net.Http、Version = 2.0.0.0 in MVC4 Web API


1
多分この答えはあなたを助けることができます:stackoverflow.com/a/18700279/795876
fsenart 2013

回答:


164

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

詳細については、http://msdn.microsoft.com/en-us/library/2fc472t2.aspx参照してください。

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


7
これを10回賛成できたらいいのにと思います。VSにこれを自動的に行わせるのは良かったです。ヒントありがとうございます!
ボブ・ホーン

4
残念ながら、常に機能するとは限りません。実際、私はよく言うことですが、この警告をダブルクリックしても何も起こりません。
Trevor de Koekkoek 2014年

3
変更するWeb /アプリ構成をチェックアウトする必要があります。何らかの理由で、この場合、VSはファイルをチェックアウトする気がないようです。
jeff.eynon 2014

39

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 OData5.0ベータから非常にインスピレーションを得たソリューション-GlobalConfigurationにアクセスするとセキュリティエラーが発生する


3
これは私にとってはうまくいきました-system.net.httpの依存関係が更新されたため、最新のCORS WebAPIパッケージをインストールしたときに同じ問題に直面しました。
sandeep talabathula 2014

1
あなたはロックマン、どうもありがとう。私の場合、Web構成はnuget復元によって更新されませんでした。デプロイ後に、手動で更新しました。
Leandro

同様に、VSがこれを行わない場合、バインディングを自分で機能させるには、この回答が必要になるため、これは+1になります。
Michael Blackburn

11

同じ問題が発生し、次のライブラリに対してCopyLocalをtrueに設定することで解決しました。

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

私はMVC4とNET4を使用していることを追加する必要があります


1
これは私にとってもそれを解決しました-しかし、私はこれが実際に何を意味するのか本当に知りたいですか?
serup 2016年

11

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

修正するために、Nugetを介してWeb Api WebHostおよびWebAPIパッケージを5.0に更新しました。これは、現時点(10/23/2013)の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>

8

または、NuGetパッケージマネージャーコンソールからこれを行うことができます

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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


4

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


1

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

私が最終的に理解したのは、ビルドするときに、binフォルダーにsystem.web.mvcバイナリアセンブリのコピーが既に存在していたことです。

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

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

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

頑張ってください-このエラーは苦痛です!


1

私は同じエラーに直面しました。Unity Framework for Dependency Injectionをインストールすると、HttpとHttpFormatterの新しい参照が構成に追加されました。これが私が従ったステップです。

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

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


1

方法で解決します。最初にnugetをインストールします。あなたが使用する2番目。
イラストは続きます:

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

最後に、プロジェクトの最新バージョンをもう一度確認します。


0

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

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

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


0

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

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

私たちのために、ProgramFilesからのリファレンス Microsoft.Data.Edm.dllOData.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

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


0

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.