9

プロジェクトはローカルで正常に実行されます。公開された場合にのみ、次のエラーが発生します。

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

過去数時間グーグルで問題を調べたのは、プロジェクトに追加したnugetパッケージがかみそり1を参照し、かみそり2のdllを上書きしたことのようです。razor 2.0.0.0 dllを1ではなく参照にコピーしようとしましたが、エラーが解決しません。これは、詳細なビルド出力に競合が示されている場所です。

There was a conflict between "System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" and "System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
1>      "System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was chosen because it was primary and "System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was not.
1>      References which depend on "System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" [C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll].
1>          C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll
1>            Project file item includes which caused reference "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll".
1>              System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
1>      References which depend on "System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" [C:\Users\Jack\SkyDrive\LessonUp.Current\packages\RazorEngine.3.0.8\lib\net40\System.Web.Razor.dll].
1>          C:\Users\Jack\SkyDrive\LessonUp.Current\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll
1>            Project file item includes which caused reference "C:\Users\Jack\SkyDrive\LessonUp.Current\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll".
1>              System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL 
1>              Recaptcha

そこから、かみそり2に応じて他のパッケージをリストし続けます。

プロジェクトに追加したパッケージは、Recaptcha、Recaptcha.mvcModel、Postalでした。
誰かがこれを解決するために私が取ることができるステップを知っていますか?
解決策につながる可能性のある情報が他にあるかどうか教えてください。

4

5 に答える 5

5

2.0 dllが参照されていることを確認し、local = trueをコピーしてから、web.configにアセンブリバインディングリダイレクトを追加してみてください。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
</assemblyBinding?
于 2013-02-13T23:14:44.723 に答える
1

MVC4プロジェクトのPostal0.8.0でも同じ問題が発生しました。NuGetを使用してPostalをインストールすると、に置き換えSystem.Web.Razor 2.0られSystem.Web.Razor 1.0ます。への参照を削除してからSystem.Web.Razor 1.0、に追加し直す必要がありましたSystem.Web.Razor 2.0。さらに、[プロパティ]で[ローカルコピー]を設定する必要があります。もちろん、プロジェクトを再構築します。それを実行すると、VS2012はデプロイされたbinディレクトリにをコピーし、問題は解決しました。TrueSystem.Web.RazorSystem.Web.Razor.dll

Postalは、これらの依存関係もweb.configに追加します。それらを削除しましたが、それでも正常に動作します。

<dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="RazorEngine" publicKeyToken="9ee697374c7e744a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.8.0" newVersion="3.0.8.0" />
</dependentAssembly>
于 2013-02-28T20:34:10.687 に答える
0

最後に、これを並べ替えて、nugetからrazor2.0を再度ダウンロードしました。webconfigを並べ替えて、依存関係のエラーを修正したようです。問題なく紺碧で稼働しています。

于 2013-02-15T03:12:20.787 に答える
0

プロジェクトファイルとweb.configをチェックして、NuGetパッケージによって変更されているかどうかを確認します。既知の問題のある子は郵便0.8.0です。依存関係としてRazorVersionのベータ版を取り込みます(安定版のみを表示するようにフィルタリングした場合でも)。RazorVersionを安定した最新バージョンに更新しても、プロジェクトファイルはSystem.Web.Razorバージョン1を参照することになり、web.configのランタイムアセンブリバインディングが正しくなくなります。

修正するには、プロジェクトファイルとweb.configで、新しい空のMVC4プロジェクトのものとdiffを実行します。次に、元のプロジェクトファイルからの正しいReference要素をコピーします。System.Web.Razorweb.configで、のdependentAssembly要素を削除しSystem.Web.Razorます。

これが、プロジェクトファイルのTLDD(怠惰すぎる、差分しなかった)テキストです。うまくいけば、このスニペットが古くなるまでに、根本的な原因が修正されるでしょう。

<Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Razor.2.0.20715.0\lib\net40\System.Web.Razor.dll</HintPath>
</Reference>

(残念ながら、NuGetをアンインストールして再インストールしても、これを修正することはできません。最初に、郵便などの問題のある依存パッケージをアンインストールする必要があります。これにより、再インストールすると問題が発生します。)

于 2013-02-27T03:53:58.080 に答える
0

オリジナル..

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

何らかの理由で、dllが3.0.0.0であるのに対し、newVersion属性は2.0.0.0バージョンに設定されました

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

それが働いたより

于 2014-12-15T21:38:16.770 に答える