8

ここ数か月、mvc4 Web アプリケーションに取り組んできました。金曜日にナゲットで更新パッケージを実行して、ライブラリの最新バージョンがあることを確認するまで、すべてがうまく機能していました。

アプリケーションで何かを表示しようとすると、エラーが発生することがわかります Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.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)

web.config と packages.config を確認しましたが、どこにも参照していませんSystem.Web.WebPages.Razor, Version=3.0.0.0

バージョン 2.0.0.0 を使用して、dependentAssembly ブロックを web.config に追加しました。

<dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

ビューディレクトリのweb.configにもv2.0.0.0が指定されていることを確認しました

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

また、リファレンスで参照されているバージョンが 2.0.0.0 であることも確認しました。私はそれを削除して読み込もうとしました。サーバーに最新バージョンの .net フレームワークがインストールされていることを確認してみました。

これをサーバーとローカルの両方でテストしましたが、同じエラー メッセージが表示されます。

ローカルのエラー ログにこれが表示されますLOG: Post-policy reference: System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 が、原因に関する情報が見つかりません。

Visual Studio 2012 プレミアムで開発しています。

誰にもアイデアはありますか?

4

6 に答える 6

12

web.config と packages.config を確認しましたが、どこにも System.Web.WebPages.Razor、Version=3.0.0.0 を参照していません。

それはあなたの問題だ。私自身も同様の問題に何度か遭遇しました。ただし、ほとんどの場合、1 つのソリューションで複数のプロジェクトを扱う場合に発生する傾向があります。それがあなたの場合に当てはまるかどうかはわかりません。それにもかかわらず、問題は「アップグレード」された実際のプロジェクト参照に要約されますが、web.config と packages.configはそのアップグレードされたパッケージを参照していません。プロジェクトの参照にアクセスして、Razor の参照のプロパティを表示すると、そこに 3.0.0.0 と表示されていることに大金を賭けるでしょう。参照を削除し、下位バージョンのパッケージの bin ディレクトリを参照して再度追加するか、完全にアップグレードすることができます。

私が言ったように、これは通常、あるプロジェクトをアップグレードして別のプロジェクトをアップグレードしない場合に、マルチプロジェクト ソリューションで発生します。これを修正する最も簡単な方法は、ソリューション全体の nuget パッケージを管理することです。その後、Razor の複数のリストが表示され、1 つまたは複数のプロジェクトがチェックされているものの、一部のプロジェクトがチェックされていない場合や、その逆の場合があります。古いバージョンの Razor の古いバージョンを削除して (関連するプロジェクトのチェックを外して)、適用します。次に、新しいバージョンの Razor に戻り、不足しているすべてのプロジェクトに適用します。

于 2013-10-21T19:24:41.743 に答える
2

Chris Pratt の回答で説明されている手順を実行すると、System.Web.Websites.Razor は 3.0.0.0 に更新するプロセスを経たばかりなのに、まだバージョン 2.0.0.0 を表示していたことを除いて、同じ問題がありました。 NuGet を介して。

私にとってそれを修正したのは、MVCパッケージをNuGetでアンインストールしてから再度インストールすることでした(したがって、その依存関係を再インストールします:System.Web.WebsitesおよびSystem.Web.Razor)

于 2015-05-09T06:27:18.177 に答える
0

アセンブリ ([参照] 内) を右クリックし、そのコンテンツ メニューで [プロパティ] を選択して、Visual Studio の [プロパティ] タブにそのプロパティを表示します。その下で Copy Local プロパティを探し、その設定が True であることを確認します。

于 2016-02-01T11:04:44.343 に答える
0

Web アプリケーションの bin ディレクトリにある System.Web.Razor.dll ファイルの製品バージョンを確認します。次の画像は、間違ったバージョン (2.0.20715.0) を示しています。

間違った Razor dll

次の図は、正しいバージョン (3.0.11001.0) を示しています。

ここに画像の説明を入力

于 2018-04-11T10:05:26.313 に答える