Azure Webサイトに公開された後、ファイルまたはアセンブリSystem.Web.Http.WebHostを読み込めませんでした


141

私はWebプロジェクトを作成しましたが、Visual Studioでうまく動作します。しかし、それをazurewebsitesに公開した後、次のエラーが発生しました。問題の原因は何ですか?

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

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

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

ソースエラー:

現在のWeb要求の実行中に、未処理の例外が生成されました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して識別できます。

アセンブリロードトレース:次の情報は、アセンブリ 'System.Web.Http.WebHost、Version = 5.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'をロードできなかった理由を特定するのに役立ちます。

WRN:アセンブリバインディングログがオフになっています。アセンブリバインドの失敗のログ記録を有効にするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)を1に設定します。注:アセンブリバインドの失敗のログ記録には、パフォーマンスの低下が伴います。この機能をオフにするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog]を削除します。

以下はweb.configファイルの一部です。

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

回答:


129

dll公表(展開された環境)にありません。それが、Azure Webサイト環境ではなく、ローカルのVisual Studioで機能している理由です。

ただ、やるCopy Local = trueアセンブリ(のプロパティにSystem.Web.Http.WebHost)、その後、再デプロイを行う、それが正常に動作するはずです。

同様のエラー、つまり他のアセンブリが見つからない場合は、そのアセンブリをcopylocal = trueにして再デプロイし、依存関係が不明な場合はこれを繰り返します。


2
Copy Localすでに真です。奇妙なことRuntime Versionに、v5ではなくv4.0.30319であることがわかりますか?
ca9163d9 2013

4
ここで何が起こったか知っていますか?これが跳ね上がって私に噛まれたとき、私は18か月間問題なく走っていました。
Glenn Gordon

2
これで問題が解決しました。ありがとうございます。しかし、プロジェクトにフレームワークライブラリを含める必要があるのは奇妙に思えます(私の場合はAzureではなくIISサーバーです)。誰かが更新を実行するケースがあるかどうか知っているので、それらをもう含める必要はありませんか?
edgarpetrauskas 2014年

1
ローカルのコピーを見つけるのに永遠にかかったので、ミニアドオン:VS2013では、プロジェクトの「参照」ノードを開き、「ローカルのコピー」を設定するライブラリの右クリック->プロパティを選択します。
ArtHare 2015

6
ローカルコピーが既にtrueに設定されていて、依存関係のためにWebApiを更新できない場合は、ローカルコピーをfalseに設定してビルドし、ローカルコピーをtrueに戻してビルドするというトリックがあります。これが機能する理由はわかりません。
DeeArgee 2015年

90

それでも答えを探している場合は、この質問スレッドを確認してみてください。同様の問題を解決するのに役立ちました。

編集:Update-Package Microsoft.AspNet.WebApi -reinstallPathoschildによって提案されたように、私を助けたソリューションはNugGetパッケージマネージャーから実行することでした。次に、このスレッドで Sergey Osypchukが提案したように、.suoファイルを削除してVSを再起動する必要がありました。


回避のリンクだけの答えは...むしろ...ここで上記のリンクから記事の関連情報を喜ばください
Anvesh Yalamarthy

3
Update-Packageコマンドを実行すると問題が解決しましたが、他の提案はどれもうまくいきませんでした。答えてくれてありがとう!
DigiOzマルチメディア、2015

問題の最善の解決策。
フェスティムカハニ2015

完璧な答え、ありがとう!
Apolo

3
この解決策は私にも役立ちました。これは、ReSharperの「未使用のアセンブリの削除」機能が原因であると私はかなり確信しています。未使用のアセンブリを削除すると、NuGetパッケージの内容を確認せずに盲目的にアセンブリが削除されることがあります。
Joe King

54

同じ問題に遭遇CopyLocalし、以下のライブラリーをtrueに設定することで解決しました。

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

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


これは役に立ちましたありがとうございます。これらのファイルがGACだけに存在しない理由を知っていますか?異なるサイトが異なるドットネットフレームワークなどを使用している可能性があるためですか?
dellyjm

私が覚えているように、Microsoftがその領域に重要な修正を適用してからこの問題が発生しました(私はSystem.Web / ASP NET / MVCで推測しています)。これらの名前空間はGAC(ネイティブNETアセンブリではない)ではなく、個別のVisual StudioまたはMVCパスにあると思います。
Bronek 2015年

これは私のVPSの問題を解決しました(これは
Azureの

これは私には役立ちました(私はAzureを使用していません)。私はプロジェクトを.net 4.5フレームワーク環境から4.0に移動していましたが、すべての最後にこの問題が発生しました。
TheQ

1
上記のDeeArgeeの提案に従って、これらのdllの3つすべてに対してLOCAL COPY = trueがすでにありました。しかし、この提案は最終的に問題を解決しました。「ローカルコピーがすでにtrueに設定されている場合、ローカルコピーをfalseに設定してビルドし、ローカルコピーをtrueに戻してビルドするトリックがあります。これが機能する理由がわかりません。 – DeeArgee 15年11月19日17:16
Debbie A

34

私にとっては、次のセクションをweb.configファイルに追加して作業しました:

<configuration>
...
    <runtime>
    ...
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
    ...
    </runtime>
...
</configuration>

この例はMVC 5.1を表しています。それが誰かがそのような問題を解決するのに役立つことを願っています。


2
あなたは素晴らしいです。mvc5の魅力のように働きました。ありがとう
DavidGraça14年

2
ありがとう、私のためにも働いた+1、この質問をした人はこれを答えとしてマークする必要があります!
Ray

または、単にMicrosoft.AspNet.WebApi.WebHostnugetを介してパッケージを追加します。
Optimax

15

私にとっては、公開ダイアログの設定にあるファイル公開オプションで「宛先で追加のファイルを削除する」を選択した後に機能し始めました。


私のために働いた!良いですね。
シゾ博士、2015年

これは私のために働いたここでの唯一の解決策です。そこには、他の古いバージョンのDLLがあり、問題が発生していたと思います。ありがとう!
Ohad Schneider

10

公開された(デプロイされた環境)にDLLがありません。それが、Azure Webサイト環境ではなく、ローカルのVisual Studioで機能している理由です。

アセンブリ(System.Web.Http.WebHost)のプロパティでCopy Local = trueを実行し、再デプロイを実行するだけで問題なく動作します。


ここでも同じですが、これはまさに必要なものです。
pabloelustondo 2015

1
おそらく、同じソリューションが1年前に他のいくつかの回答で説明されていたためです。
Chad

6

vs2012を使用していますが、更新KB2781514によって設定が一部変更されたと思います。MVC4プロジェクトのすべてのSystem.Web.Httpがfalseに変更され、このメッセージが何度も表示されます。All file in this project公開中のプロパティを変更しましたが、機能しません。最後にCopy Local = true、1つずつ変更して、この問題を解決する必要があります。


2

同じエラーが発生し、バージョンを4から3に変更して解決しました。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- Ensure correct version of MVC -->
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>

2

私のアプリケーションでも同じ問題がありました。

System.web.http.webhost not found.

system.web.http.webhostVisual Studioで実行するメインプロジェクトからファイルをコピーして、公開したプロジェクトbinディレクトリに貼り付けるだけです。

この後、同じエラーが表示される場合がありますが、ディレクトリ名が変更されている可能性がありますsystem.web.http。上記と同じ手順に従ってください。すべてのファイルがアップロードされた後に動作します。これは、Visual Studioのnugetパッケージが原因でインターネットからダウンロードされますが、サーバーではダウンロードできません。

このファイルはプロジェクトbinディレクトリにあります。


1

これは、VS2013(Update 5)/ASP.NET 4.5のMVCおよびWeb API 2を含むプロジェクトタイプ「Webアプリケーション」で発生しました。プロジェクトを作成した直後、コードを追加する前にエラーが発生しました。次の設定を追加すると修正されます。"System.Web.Helpers"を解決した後、 "System.Web.Mvc"と "System.Web.WebPages"に対してさらに2つの同様のエラーが表示されます。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>

0

いくつかのDLLがありませんでした。次回公開したときに手動でディレクトリにコピーしたとしても、それらは消えてしまいます。それぞれがVSでローカルにコピーするように設定されています。私にとっての修正は、それぞれをローカルでコピーするように設定し、保存してビルドしてから、ローカルでコピーするように設定することでした。今回はすべてのDLLを正しく公開した。奇妙な


0

ソリューションに複数のプロジェクトがあり、このエラーのためにプロジェクトの1つがビルドに失敗した場合は、そのプロジェクトにWebApi Core nugetパッケージがインストールされていることを確認してください。System.Web.Httpへの参照を追加するだけでは効果がなく、正しいnugetパッケージをそのプロジェクトにインストールする必要があります。

私のソリューションには複数のプロジェクトがあり、WebApi Coreはすでに別のプロジェクトにインストールされています。リストからアセンブリを右クリックしてチェックすることでSystem.Web.Httpアセンブリを参照しましたが、Azureでは機能しませんでしたが、ローカルでは問題なくビルドされます。手動参照を削除し、アセンブリ参照が必要な各プロジェクトにWebApi Core nugetパッケージを追加する必要がありました。


0

「ローカルのコピー」がすでにTrueの場合、公開先のファイルを削除して再度公開するとうまくいく場合があります。

たとえば、IISを使用している場合は、Webサイトと、それらが公開されているディレクトリのコンテンツを削除し、再度公開します。

宛先に古いバージョンのファイルがある可能性があるため、古いバージョンを使用していないことを確認するには、すべてを削除してから再度公開します。


0

web.configから次のエントリを削除したところ、うまくいきました。

<dependentAssembly>
                <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
            </dependentAssembly>

0

パッケージのバージョンがソリューション全体で同じであることを確認してください。私Microsoft.AspNet.Mvcはソリューション全体でパッケージをダウングレードしてアップグレードし、問題を解決しました。

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