222

MVC3ソリューションの構築はうまくいきましたが、ブラウザでエラーが発生しました:

コンパイラエラーメッセージ:CS0234:タイプまたは名前空間名'Html'は名前空間'System.Web.Mvc'に存在しません(アセンブリ参照がありませんか?)

Source Error:
Line 25:         <add namespace="System.Web.Mvc" />
Line 26:         <!--<add namespace="System.Web.Mvc.Ajax" />-->
Line 27:         <add namespace="System.Web.Mvc.Html" />
Line 28:         <add namespace="System.Web.Routing" />
Line 29:         <add namespace="System.Web.WebPages" />

ソリューションのパケットをインストールNuGetし、すべてのプロジェクト用にセットアップしましたMVC3MVC3ライブラリSystem.Web.Mvc.Ajaxなど が含まれSystem.Web.Mvc.Htmlていますか?なぜエラーが発生するのですか?


Referencesフォルダーには、System.Web.Mvcがあります。

Runtime version: v4.0.30319

Version: 3.0.0.0

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" 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.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <machineKey compatibilityMode="Framework45" />
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportStore;Integrated Security=True;Pooling=False;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

MSDNSystem.Web.Mvc名前空間

ファイルpackages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0-rc" />
  <package id="jQuery" version="1.7.2" />
  <package id="jQuery.UI.Combined" version="1.8.11" />
  <package id="jQuery.Validation" version="1.9" />
  <package id="Microsoft.AspNet.Mvc" version="3.0.20105.1" />
  <package id="Microsoft.AspNet.Providers.Core" version="1.0" />
  <package id="Microsoft.AspNet.Providers.LocalDB" version="1.0" />
  <package id="Microsoft.AspNet.Razor" version="1.0.20105.408" />
  <package id="Microsoft.AspNet.WebPages" version="1.0.20105.408" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
  <package id="Modernizr" version="2.0.6" />
  <package id="Moq" version="4.0.10827" />
  <package id="Ninject" version="3.0.1.10" />
</packages>
4

23 に答える 23

424

ソリューションをクリーンアップしてから、それらのファイルのプロパティを に設定しますCopy Local = True

Copy Local プロパティを True または False に設定するには

ソリューション エクスプローラーで、[すべてのファイルを表示] ボタンをクリックして、[参照] ノードを表示します。

  • プロジェクトの参照ノードを開きます。
  • [参照] リストで参照を右クリックし、[プロパティ] をクリックします。その参照に関連付けられたプロパティが [プロパティ] ウィンドウのリストに表示されます。
  • [プロパティ] ウィンドウで、[ローカルのコピー] プロパティを True または False に変更します。
于 2012-10-31T00:31:50.523 に答える
38

これは通常、IIS から実行し、既定のサイトのアプリ プールが .NET バージョン 2.0 に設定されている場合に発生します。Visual Studio から IIS を使用すると、仮想ディレクトリが作成されますが、引き続き既定のサイトのアプリ プールで実行されます。ビルドの Web サーバーを使用している場合は、Web プロジェクトを右クリックし、プロパティに移動して、正しいバージョンの .NET で実行していることを確認してください。IIS で、アプリ プールの .NET バージョンを確認します。

プロジェクトの作成方法に関する私の最後のコメントに続いて、次のようにアセンブリを正しく含めていますか (VS10 の MVC3 プロジェクト テンプレートによって生成された既定の web.config ファイルから取得):

<compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.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.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
</compilation>
于 2012-06-17T13:17:09.830 に答える
31

MVC を更新する必要があります。

  1. [ツール] -> [NuGet パッケージ マネージャー] -> [ソリューションの NuGet パッケージの管理] に移動します。
  2. 「アップデート」をクリック
  3. 「Microsoft ASP.NET MVC」を更新する
  4. ソリューションの再構築
于 2014-11-07T19:31:31.180 に答える
28

私は同じ問題を抱えていました-私のシナリオは、libフォルダーから新しいSystem.Web.Mvc.dllを参照していて、「ローカルのコピー」をtrueに設定していなかったというものでした。その後、アプリケーションは正しい名前空間 (Html、Ajax など) を持たない GAC のバージョンに戻り、実行時エラーが発生しました。

于 2012-10-29T12:55:58.797 に答える
16

私のソリューションは、Manage Nuget Packages for Solution... の下にありました。かなりの数のパッケージに対して、多数の更新を行う必要がありました。

半歩戻って、ソリューションとプロジェクトをあるフォルダーから別のフォルダーに移動したため、自分を台無しにしたとしましょう...そのため、プロジェクトが考えていた場所と比較して、物事はすでにうまくいきませんでした。すべてが順調に進みましたが、私とは異なるアプローチを使用しない限り、Nuget が混乱するようです。

ソリューションに戻ります... ソリューションの Nuget パッケージの管理... >>更新>> Microsoft と .NETに移動し、[すべて更新] ボタンをクリックします。

すべてが正常に戻り、幸せになりました。

于 2014-10-18T15:06:39.340 に答える
9

私はmvc 5プロジェクトと問題のある問題をダウンロードしました

<add namespace="System.Web.Mvc.Ajax" />  

次のエラー メッセージが表示されます。

CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?)

-- > 私はこのウェブページに来て、クリーンアップや上記のいくつかのことを試しました...

私にとってうまくいったのは、

Manage Nuget and Update all the packages.  Then it worked fine.
于 2014-10-24T03:48:48.280 に答える
8

nuget パッケージ マネージャーで次のコマンドを実行すると、修正されました。

update-package microsoft.aspnet.mvc -reinstall
于 2015-10-13T14:55:47.733 に答える
6

質問の日付を考えると、この回答はかなり遅れていますが、誰かが役に立つと思うかもしれません.

上記の解決策はどれも、Visual Studio 2012 のローカル プロジェクトである Net Framework 4.5 MVC 4 でうまくいきませんでした。コンテキストについては、CodeProject ( http://www.codeproject.com/ Articles/615805/Creating-a-Clean-Minimal-Footprint-ASP-NET-WebAPI ) この問題に遭遇したとき。

アプリケーションが既に「System.Web」を参照していたとしても、「System.Web.Mvc」をアプリケーションの参照に明示的に追加することでうまくいきました。

于 2014-03-06T21:19:23.773 に答える
3

csproj で参照パスを表示して確認します。

System.Web.Mvc (およびその他) への参照を削除し、それらをカスタム パスに再追加しました。C:\Project\OurWebReferences

ただし、これを行った後、まだ csproj の参照パスは変更されませんでした。だった

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\OurWebProject\bin\Debug\System.Web.Mvc.dll</HintPath>
</Reference>

手動に変更

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\..\..\OurWebReferences\System.Web.Mvc.dll</HintPath>
</Reference>

パスは単なる例です。

于 2015-09-24T00:14:38.620 に答える
2

私は本当にばかげたことをしました (そして多分あなたもそうしました)。

電話しようとしてたSystem.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html はクラスではなく名前空間であり、エラー メッセージをよく読んでいなかったので、クラスHtmlが名前空間 System.Web.Mvc に存在しないため、エラーを解釈しました。ここまで(私が知っているばか)。

@using System.Web.Mvc.Htmlページにusing ステートメントを追加するだけで@Html.Partial、期待どおりに機能しました。

于 2016-06-09T17:22:28.113 に答える
1

私は同じ問題を抱えていましたが、私の場合は他の要因が原因でした。私は同じ問題を抱えている他の人を助けるためにこれを書きます。複数のプロジェクトを含むソリューションがあります。そのうちの 2 つは System.Web.Mvc で動作します。通常、参照は、使用するバージョンを制御する外部パッケージを指していました。何らかの理由で、プロジェクト参照の 1 つが GAC に移動し、GAC dll (バージョン 4.0.0.1) を指し、プログラムでエラーが発生しました。それを修正するには:

System.Web.Mvc への参照が同じディレクトリ パス内の同じ dll を指しているかどうかを簡単に確認します。

お役に立てば幸いです。

于 2014-12-29T15:47:16.197 に答える
1

私はこの問題を抱えていました。コピーローカルのオンとオフなどを設定しても機能しませんでした。プロジェクトは nuget を使用していなかったため、その周りの修正も問題外でした。

私にとっての修正は、MVC 3 をインストールすることでした (Web プラットフォーム インストーラーを使用して行いました)。

.net フレームワークが進歩し続け、人々が古い MVC をインストールしていないため、これは人々にとってより多くの解決策になると思います。

于 2016-03-31T13:56:21.523 に答える
1

DLL を CopyLocal/true に設定するか、その他の主要な修正を行うことで問題が解決する可能性がありますが、20 分間無駄な時間を過ごした別のエッジ ケースを次に示します。

名前空間を Views/Web.config に追加するときは、大文字と小文字が正しく区別されていることを確認してください。

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="THE.NameSpace" />
        <add namespace="THE.Namespace" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
于 2016-09-15T14:00:32.117 に答える
1

上記のいずれでも問題が解決しない場合は、System.Web.Mvc.dll のプロパティを設定してローカル チューアをコピーしてください。

それは解決します

于 2014-10-30T10:38:40.723 に答える
1

多くの人がこの問題を経験しているようです。私の問題は、他のプロジェクトの bin フォルダーへのパスを持つ参照、またはシステム フォルダーからの dll の参照が原因でした。このプロジェクトは約 6 年前のもので、以前の開発者は、これがライブラリを参照する方法であると判断していました。

解決策は、すべての参照を調べてパスを確認し、参照を削除して NuGet を使用して追加することでした。NuGet にないパッケージについては、パッケージと一緒に別のフォルダーを作成し、NuGet と同じレイアウトでそこに dll を配置しました。

また、構成ファイルを調べて、正しいバージョンのパッケージが使用されていることを確認する必要がありました。長くて苦痛なプロセス!

于 2018-05-29T14:15:04.427 に答える