38

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>
4

11 に答える 11

40

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 コンポーネントを追加した後に初めて発生したようです。そのコンポーネントは、アセンブリ バインドを通じて正常に動作しますが、ASP.NET コンパイラが最初に 1.0 Web ページをロードしようとする理由である可能性があります。

于 2012-05-03T12:08:47.813 に答える
8

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

現在、開発に 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 から特定のバージョンを再度追加すると、正しく機能します。

于 2012-09-11T09:27:10.440 に答える
3

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

于 2012-09-24T22:30:16.083 に答える
2

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

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

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

于 2012-07-10T04:10:29.497 に答える
2

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

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

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

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

Microsoft.Web.Infrastructure.1.0.0.0

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

于 2015-07-25T11:06:30.347 に答える
1

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

于 2013-03-14T14:03:19.693 に答える
1

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

<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>
于 2013-01-10T10:59:46.877 に答える
0

このような場合、ソリューションのルートフォルダー内のすべてのファイルに対して「ファイル内検索」を実行する価値があります。

上記の例では、次のように検索しました。System.Web.WebPages, Version=1.0.0.0

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

于 2012-10-02T16:46:01.447 に答える
0

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

于 2013-09-12T06:43:17.547 に答える