web-dev-qa-db-ja.com

aspnet_compilerが2.0.0.0ではなくSystem.Web.WebPages 1.0.0.0の誤ったバージョンを検出しています

VS2010で正常にコンパイルされるASP.NET MVC4プロジェクトがあります。展開の目的で、aspnet_compiler.exeを使用してWebサイトをプリコンパイルしようとするNantスクリプトを実行しますが、System.Web.WebPageでアセンブリ参照の問題が発生し続けます

エラーCS1705:アセンブリ「System.Web.Mvc、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」は「System.Web.WebPages、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」を使用します参照アセンブリ 'System.Web.WebPages、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'よりも高いバージョン

また、web.configに次のアセンブリバインディングがあります。

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
        <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="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

私のcsprojには次の参照があります:

<Reference Include="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <Private>True</Private>
 <HintPath>..\packages\AspNetWebPages.Core.2.0.20126.16343\lib\net40\System.Web.WebPages.dll</HintPath>
</Reference>
36
Todd Smith

Web.configで2.0アセンブリを明示的に参照することにより、この問題を解決しました。何らかの理由で、ASP.NETコンパイラ(MvcBuildViewsを実行している場合)は、古い1.0アセンブリが見つかった場合、最初にそれを使用すると考えられます。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- … -->
  <system.web>
    <!-- … -->
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add Assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
        <add Assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add Assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add Assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      </assemblies>
    </compilation>
    <!-- … -->
  </system.web>
  <!-- … -->
</configuration>

ところで:この問題は、サードパーティのASP.NET MVC 3.0コンポーネントを追加した後に初めて発生したように見えました。そのコンポーネントは、Assemblyバインディングを通じて正常に機能しますが、ASP.NETコンパイラーが最初に1.0 Webページをロードしようとする理由である可能性があります。

39
hangy

同様の問題がありました。

現在、開発にVisual Studio 2012を使用しており、2010プロジェクトを2012に変換して展開しようとしたときに、ASP.NETは1.0.0.0ではなく2.0.0.0を必要としていました。

調査の結果、プロジェクトがSystem.Web.WebPagesの特定のバージョンを参照していないことがわかりました。そのため、VS 2012にアップグレードした後、2.0.0.0バージョンが見つかりました。

プロジェクトから参照を削除してから、GACから特定のバージョンを再度追加すると、正常に機能します。

8
TheNameless

私たちにとって、問題は関連するDLLの_bin_deployableAssembliesフォルダ。これを削除すると、2.0バージョンで正しく構成されました。

3

MVC 3から5.2.3.0にサイトをアップグレードするときにこの問題が発生しました。

私の問題は、TFSがパッケージおよび関連するDLLをNugetインストールから追加しないことでした。

ソリューションのパッケージフォルダーに次のフォルダーを手動で追加しました。

Microsoft.AspNet.Razor.3.2.3
Microsoft.AspNet.WebPages.3.2.3

Microsoft.Web.Infrastructure.1.0.0.0

コミットすると、ビルドサーバーに問題はなくなりました。

2
CountZero

このエラーは、MvcBuildViewsがtrueに設定されている場合にも発生します。

「ソリューションのビルド」を使用してソリューション全体をビルドすると、常にこのエラーが発生することに気付きました。その時点で、MVCプロジェクトをすぐに単独でビルドした場合(プロジェクトを右クリックしてから[ビルド])、MVCプロジェクトは正常にビルドされます。

MVCプロジェクト自体のビルドは、依存するプロジェクトでビルドをトリガーしない限り成功するようです(つまり、それらは最新のものです)。ただし、「Build Solution」を使用したビルドは常にこのエラーで失敗します。

2
rememberjack

私にとっては、それはSystem.Web.WebPages.Administration v1.0.0.0への言及でした。削除すると、すべてがWeb.configの調整なしで機能しました。

1
Грозный

この問題が発生したとき、私はしばらく頭を悩ましました。最終的に、web.configの「ランタイム」セクションに次のセクションがあることに気付きました。

<runtime>
 . . .
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
. . .
</runtime>

ご覧のとおり、これはアセンブリのバージョン2を指します。これは、web.configのsystem.web/compilation/assembliesセクションにもある次のコードと一致しません。

<add Assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

プロジェクトの参照で参照される実際のアセンブリは実際にv1.0.0.0であるため、上記のコードの最初のチャンクを次のように変更し、問題をすぐに修正しました。そもそも間違いがどのようにそこに到達したのか分かりません。

<runtime>
 . . .
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
. . .
</runtime>
1
centralscru

参照System.Web.Mvcを削除して再追加する

0
Mashhood

私にとってこの問題は、Webプラットフォームインストーラーを介して最新バージョンの.NETに更新する購入を引き起こした可能性が高いですが、ASP.NET MVCの最新バージョンがインストールされていませんでした。 Web Platformインストーラーを使用してこれを更新すると、問題が修正されました。

0
jps

参照に移動し、System.Web.Mvcバージョン4.0以上を検索して追加します。 System.web.mvc 4.0.0.1の参照を追加するだけで機能します。

古いmvcバージョンを削除することを忘れないでください。

0

このような場合、ソリューションのルートフォルダー内のすべてのファイルで'Find in Files'を実行する価値があります。

上記の例では、System.Web.WebPages, Version=1.0.0.0

この方法で、古いバージョンへのすべての参照を取り除くことができます。

0
Drew Noakes