93

少し奇妙な問題があります。
MVC4と新しいWebAPIを使用してアプリを開発しましたが、ローカルで正常に動作します。サーバーにMVC4をインストールし、アプリをデプロイしました。今、私は次のエラーを受け取ります:

ファイルまたはアセンブリ'System.Net.Http、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=31bf3856ad364e35'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)

説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとその発生場所の詳細については、スタックトレースを確認してください。

面白いことに、パッケージフォルダーまたはASP.NET MVC 4\AssembliesフォルダーにローカルにあるSystem.Net.Httpのバージョンは1.0.0.0です。プロジェクトからSystem.Net.Httpへの参照を実際に削除しましたが、それでも同じメッセージが表示されます。2.0.0.0参照をどこから取得するのか、なぜローカルでは機能するがサーバーでは機能しないのかについて少し混乱しています。

nugetの依存関係を見る:

ASP.NET WEb APIコアライブラリ(ベータ版)は、System.Net.Http.Formattingに依存しています。
また、System.Net.Http.FormattingはSystem.Net.Httpに依存します。
それがここから来ていると思います。しかし、私はこのパッケージのバージョン2.0.20126.16343をインストールしています、それは内部のdllがバージョン1.0.0.0を持っているということだけです

私は何かが足りないのですか?

アップデート:

これは別のASP.NETアプリのサブアプリケーションですが、もう1つは引き続きWebFormsに基づいています。だから、何かが台無しになっています。しかし、web.configのアセンブリセクションでクリーンアップを実行しても、アプリ自体が見つからない場合。

4

17 に答える 17

117

以前に変換された(.NET 4.5から4.0に)WebアプリをIIS 6.0に展開しているときに、同じエラーが発生しました。

web.configランタイムセクションで私は見つけました

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>

これに変更しました

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>

今では魅力のように機能します。

于 2012-04-20T16:17:06.553 に答える
31

appharborへのアプリのデプロイでも同じ問題が発生しました。まだ.NET4.5をサポートしていない問題。私がしたこと。

  1. プロジェクトを.NET4.0プロファイルに切り替えました。
  2. WebAPINuGetパッケージをアンインストールしました。
  3. Web API(ベータ)NuGetパッケージを再度インストールしました。
  4. .csprojファイルに参照されているすべてのアセンブリが含まれていることを確認したため、GACではなく常にBinフォルダーから取得されます。
于 2012-03-28T07:25:56.287 に答える
10

私は一緒に働いた:

1-4から2.0へのリダイレクトに注意してください

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a"   culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
于 2012-08-05T20:58:42.413 に答える
2

プロジェクトのReferencesフォルダーに、このdllへの参照があり、バージョンは2.0.0.0である必要があります。これがCopyLocal=trueに設定されていることを確認してください。そして、それがサーバーアプリのbinフォルダーに到達することを確認します。

これは、現在nugetによって管理されているライブラリの1つです。したがって、Nugetを開き、すべてが最新であることを確認します。そして、プロジェクトパッケージディレクトリでは、ファイルは次のようになります。 \packages\System.Net.Http.2.0.20126.16343\lib\net40

また、新しいMVC4アプリを作成して、そのアプリのファイルが表示されるかどうかを確認することもできます。

于 2012-02-28T01:59:19.367 に答える
2

私の場合、はるかに簡単な方法で修正しました。nugetパッケージへの参照にHintPathを指定するだけです。

     <Reference Include="System.Data.Entity" />
     <Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
       <Private>True</Private>
+      <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
     </Reference>
     <Reference Include="System.Net.Http.WebRequest, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
       <Private>True</Private>
+      <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
     </Reference>
     <Reference Include="System.Numerics" />
     <Reference Include="System.Security" />
于 2014-09-22T20:54:55.100 に答える
1

私の場合、NuGetを介してSystem.Net.Httpバージョン2.1.10.0に意図せずに依存関係を追加しました。NuGetパッケージマネージャーでそれを取り除くことができませんでした(他のパッケージがそれに依存しているようだったため)。ただし、これらのパッケージはこの特定のバージョンに依存していません。これを取り除くために私がしたことは次のとおりです(代わりにNuGetコンソールを使用することもできます(–forceパラメーターを使用):

  • packages.configのMicrosoft.Net.Httpのバージョンを2.1.10.0から2.0.0.0に変更します
  • NuGetパッケージマネージャーでBCLポータビリティパックをアンインストールします
  • 依存ライブラリ(バージョン2.1.10.0のSystem.Net.Http。*)を手動で削除します
  • System.Net.Http2.0.0.0への参照を追加します
于 2013-06-20T07:48:25.883 に答える
1

ファイル構成で、依存するアセンブリを削除しました。

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
<dependentAssembly>

今では正常に動作します。

于 2013-07-26T09:47:50.133 に答える
1

この問題は、展開の「準備ができている」と思われるテストサーバー(Windows 2008 R2)で発生していました;)

ヒントは、DEVマシンとデプロイメントサーバーの間でSystem.netのバージョンを確認したところ、それらが一致しなかったことです。

以下の手順を使用して修正しました。

  1. ここから.NETFramework4.5スタンドアロンインストーラーをダウンロードしました

  2. デプロイメントマシンでインストーラーを実行しました

フレームワークのインストール後、サーバーは再起動を望んでいたので、それとvolla!行ってよかった!!

于 2013-10-08T13:02:26.080 に答える
1

VS 2013を使用しており、新しいMVC 4 Web APIを作成し、TeamCityサーバーでビルドしたときにsystem.net.http.dllが正しいバージョンではないという問題がありましたが、VS2013を搭載したローカル開発者のマシンでは正常にビルドされますインストールされています。

最終的に問題を特定しました。

新しいMVC4Web APIを作成し、プロジェクトの作成時にフレームワーク4.0を選択すると、DLLの正しいNuGetパッケージバージョンが.. \ packages \ Microsoft.Net.Http.2.0.20710.0 \ lib \net40\に配置されていることがわかりました。 System.Net.Http.dll

ただし、このプロジェクトの.csprojファイルによると、このsystem.net.http.dllファイルのパスは次のとおりです。..\ packages \ Microsoft.Net.Http.2.0.30506.0 \ lib \ net40 \ System.Net.Http.dll

したがって、ビルドが試行されると、このパスの違いで失敗しますが、開発者のマシンの他の場所でファイルの正しいフレームワークバージョンが見つかりますが、TeamCityビルドサーバーでは見つかりません。

これまでのところ、これが私たちが見つけた唯一の違いです。.csprojファイルのパスを変更し、VS2013を使用してローカルのDevマシンでビルドすると、引き続き機能します。

これをバージョン管理にチェックインし、TeamCityビルドサーバー(VS 2013がローカルにインストールされていない)を使用すると、ソリューションのNuGetパッケージフォルダーで正しいバージョンの.dllが検出され、別のバージョンのsystem.net.httpを検索するのではなく正常にビルドされます。 .dllを作成し、フレームワークと一致しない新しいバージョンを見つけると、ビルドが失敗します。

これが役立つかどうかわからない。

DLLのプロジェクトファイルパスをチェックし、DLLのパッケージフォルダーパスと一致することを確認します。

于 2014-05-15T16:12:23.823 に答える
1

私のために働いたもののための他の答えを単純化するだけです。

NuGetマネージャーに移動し、関連するパッケージ(私の場合は、「Microsoft ASP.NET Web API 2.1クライアントライブラリ」と「Json.NET」)をアンインストールして、再インストールしました。数回クリックするだけです。

于 2015-08-03T14:12:46.420 に答える
0

プロジェクトを閉じて、もう一度開きます。次に、ソリューションをクリーンアップしてビルドします。私のために働く

于 2013-08-22T01:22:29.433 に答える
0

バージョン2.2.15.0の場合、私はこれを行いました。

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.2.15.0"/>
</dependentAssembly>
于 2013-10-01T13:59:29.827 に答える
0

私はこれとまったく同じ問題を抱えていました!VSの[警告]タブを確認したところ、nugetパッケージの1つが.NETFrameworkバージョン4.5.0.0を間接的に参照していることがわかりました。このパッケージをアンインストールしてから4.0バージョンを再インストールする必要がありましたが、4.0をサポートするパッケージバージョンを必ず指定してください(パッケージのインストール時に指定しないと、デフォルトで4.5に戻ります)。お役に立てれば!

于 2013-12-12T19:18:46.383 に答える
0

これは、展開後にサーバーで発生しました。次のいずれかが原因です。

A)まだ削除されているはずのbinフォルダ内の古いファイル

また

B)アプリケーションプールIDユーザーのフォルダーへの読み取りアクセス権がない。

言い換えれば、私たちにとってこれは、サイトのフォルダーのアクセス許可を修正し、binフォルダーを消去して再デプロイすることで解決されました。

于 2014-07-23T21:33:02.610 に答える
0

Gembox.spreadsheet.dllバージョン31でも同じ問題が発生しました。

"ファイルまたはアセンブリを読み込めませんでした'GemBox.Spreadsheet、Version = 39.3.30.1095、Culture = neutral、PublicKeyToken = b1b72c69714d4847'またはその依存関係の1つ。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040 )"

私はこれらの記事からほとんどすべてを試しましたが、どれもうまくいきませんでした。簡単な手順で修正されました。

基本的にdllへの正しいバージョン参照を設定する個々のプロジェクトを構築しようとしましたが、エラーはソリューションから完全になくなりました。

于 2016-01-28T19:24:13.543 に答える
0

同様の問題に進み、多くのコメントで言及されているディレクティブは正常に機能しました

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
<dependentAssembly>

ただし、古いバージョンのカバレッジが十分に高いことを確認する必要があります。そうしないと、新しいバージョンが必要な特定のバージョンにリダイレクトされず、古い参照がすでにbinディレクトリにあるため、その新しい参照を使用する場所が正しく機能しません。

于 2016-02-08T11:23:56.310 に答える
0

このエラー(および同様のエラー)の場​​合は、NuGet Consolidate([ソリューション]> [NuGetパッケージの管理...])を実行して、ソリューションで参照される各クラスライブラリで同じ参照コンポーネントバージョンが一貫していることを確認する価値があります。少し古いバージョンでも依存関係がある可能性があるためです。他の古いコンポーネント。アップデートと組み合わせて使用​​するのは簡単で、多くの苦痛を軽減できます。

これでこの問題は解決しました。MVCまたはその他のWebベースのNuGetコンポーネントも参照するヘルパーライブラリを作成する場合は、この問題に精通する必要があります。

于 2017-02-08T11:48:17.113 に答える