タイプまたは名前空間名が名前空間 'System.Web.Mvc'に存在しません


217

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か?エラーが発生するのはなぜですか?


参照フォルダーに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>

MSDN System.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>

1
あなたのウェブサーバーは何ですか?これはiisですか?
ダニエルA.ホワイト

Visual Studio 2012のExpress IIS
J.Olufsen

1
プロジェクトのターゲットは何に設定されていますか?
ダニエルA.ホワイト


2
この質問に誰が当たるかに依存します-これは私たちの一部に必要なすべてですソリューションのNugetパッケージを管理します... >>更新
Tom Stickel

回答:


420

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

ローカルコピープロパティをTrueまたはFalseに設定するには

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

  • プロジェクトの参照ノードを開きます。
  • 「参照」リストで参照を右クリックし、「プロパティ」をクリックします。その参照に関連付けられているプロパティが、[プロパティ]ウィンドウのリストに表示されます。
  • [プロパティ]ウィンドウで、[ローカルコピー]プロパティをTrueまたはFalseに変更します。

11
驚くばかり!これにより、MVC4プロジェクトで修正されました。あなたがそれについて考えるとき、それは一種の明白です。DLLが存在するかどうかを確認するために、展開されたプロジェクトを確認したことはありません。
Alex Kilpatrick 2012年

1
ありがとう!これも私を助けてくれました!
マリティム2013年

1
どういたしまして。複雑な問題は簡単な解決策で解決される場合があります。:)
Toffee 2013年

5
できます!参照を1つだけ変更する=>System.Web.Mvc
Jaider

5
「これらのファイル」が何を意味するのかを理解するために少し時間をかけました。ソリューション内のすべてのプロジェクトのアセンブリ参照を確認します。パスに「Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies」などが含まれている場合は問題の一部です。
タスク

60

何らかの理由で、私のソリューションの2つには、何らかの理由でasp.net MVCを自発的にアン​​インストールしたWebプロジェクトがあります。Nugetからインストールしましたが、どちらも再び機能します。これは、私が使用していたバージョン(4.5.1)の.netフレームワークの更新を含む最近のWindows更新のバッチの後に発生しました。

編集:.Net Web開発とツールのブログから:

Microsoft Asp.Net MVCセキュリティアップデートMS14-059がビルドを壊しました!


4
これはちょうど私に起こりました。しかし、私はMVCパッケージを再インストールする代わりに更新しました(とにかく私は古くなりました)。これが発生した原因または理由はありますか?
ジョシュアH

5
これは、参照しているMVCのバージョン(それぞれ5.1および5.0)に応じて、KB2994379またはKB2992080に関連しているようです。この更新プログラムはSystem.Web.Mvcの新しいバージョンを提供しますが、これはバージョン管理の競合を引き起こしていると思います。MVCパッケージを更新するとエラーが修正されます。何らかの理由で更新できない場合は、System.Web.Mvc.dllがローカルにコピーされるように設定する必要があります。
Vinney Kelly

1
私も同じ問題を抱えていました。パッケージを更新し、copy local = trueに設定します。みんな、ありがとう!!!!
Vackup 2014年

1
MVCコピーローカル= true +1。
Stanomatic、2014年

4
同じことが私にも起こりました。ローカルをコピーするようにMVCを設定する必要があります= FALSE、再構築、ローカルをコピー= TRUE、再構築します。すべて良い。
Jeppebm 2014年

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>

2
.NET Framework 4.5を使用するように設定されたすべてのプロジェクト。.NET 4.5がSystem.Web.Mvc.Ajaxおよびその他のクラスを見つけられないということですか?
J.Olufsen

通常、それは4.5として実行するように設定されているが、実際には別の何かとして実行されていることを意味し、System.Web.MvcでSystem.Web.Mvc.Ajaxを見つけることができません。
BlackSpy

余談ですが、System.Web.dllのバージョンは何ですか?NuGetからアセンブリを追加したとのことですが、MVC3 Webプロジェクトを作成しませんでしたか。
BlackSpy

31

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

  1. ツール-> NuGetパッケージマネージャー->ソリューションのNuGetパッケージの管理に移動します
  2. 「アップデート」をクリックします
  3. 「Microsoft ASP.NET MVC」を更新
  4. ソリューションを再構築

1
NuGetパッケージの使用は適切ですが、必要のない他のアセンブリを大量にダウンロードできますが、これで修正されます。
Canvas

1
同じ問題がありました、いくつかの恵みがあります。
Nit

28

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


16

私のソリューションは[ソリューションのNugetパッケージの管理]の下にありました-かなりの数のパッケージに対して行うべき膨大な更新がありました。

ソリューションとプロジェクトを1つのフォルダーから別のフォルダーに移動したので、半歩後退して自分がねじ込まれたと言いましょう...プロジェクトが考えていることと比較すると、物事はすでに大したことではありませんでした。すべてうまくいきましたが、私とは異なるアプローチを使用しない限り、Nugetは混乱しているようです。

戻るソリューションへ...私は単純にするために行ってきましたソリューション...のためNugetパッケージの管理 >> アップデート >> マイクロソフトと.NETとヒットすべて更新ボタンを

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


私は誤ってあなたの投稿に+1をスキップして同じタイプのソリューションを投稿しました
Tom Stickel 2014年

これも私にとっての修正でした。
ブラジャー2014年

これを行った後、JQueryとBootstrapを更新する必要がある場合があることに注意してください
Carl Onager 2014年

MVC5プロジェクトで、mvc、razor、およびwebpagesのnugetパッケージを更新するとうまくいきました。
2015年

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.

1
ああ、投稿は残しておきますが、azarc3が同じことを言っているようです。彼を賛成。
Tom Stickel 2014年

7

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

update-package microsoft.aspnet.mvc -reinstall

2
これは、約1000回以上賛成する必要があります。
Chazt3n

1
@ Chazt3nうまくいきませんでしたが、良い提案です+ 1
Jared Beach

私は他のすべての方法を試し、技術的にはパッケージマネージャーを使用して、アンインストールしてから再インストールして更新しました。だから私はこの答えについて悲観的でしたが、必死でした。これは何とか機能しました。
Mahesh

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"を明示的に追加することでうまくいきました。


ありがとう。これで私の問題は解決しました(DevExpress.Web.Mvcにあったと思われます)
dferraro

+1。私はMvcSiteMapProviderを使用していますが、MVCの最新のアセンブリでは動作しないため、nugetを使用してMicrosoft ASP.Net MVCパッケージの「すべて更新」を実行できませんでした。もう1つの提案は、おそらくこのアセンブリに対して「CopyLocal = True」を実行する必要があることです。
user007

デバッグWebアプリケーションを新しい環境にプッシュするためだけに必要です。参照に「ローカルコピー」を追加する必要がありました。
dudeNumber4 2015

4

私も同じ問題を抱えていましたが、上記のどれもうまくいきませんでした。彼らは私を正しい方向に導きました。

たとえば、System.Web.Mvc参照の「ローカルのコピー」を「true」に設定すると、自動的にFalseに戻ります。

私のソリューションではSystem.Web.Mvc参照に依存する複数のプロジェクトがありますが、この問題を引き起こしたのは1つだけです。VS 2012では、この参照には黄色の注意三角形が付いています。

この参照を見つける=>削除する=>再度追加する

これで解決しました。お役に立てれば


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>

パスは単なる例です。


3

私にとっての解決策は、すべてのプロジェクトが同じCPUでビルドされるようにすることでした-私の場合はx86


2

ローカルのコピー= Trueは、私のプロジェクトの1つで解決されました。しかし、別のプロジェクトでは、同じエラーが発生し、Copy Local = trueに設定しようとしましたが、問題は解決しませんでした。これを支援するプロジェクトプロパティで、ターゲットフレームワークを4.5.1から4.5に変更しました。


2

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

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

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

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


Visual Studio 2015は使用の必要がないことを示すフラグを立てますが、削除を許可すると、「タイプまたは名前空間名 'Helpers'は名前空間 'Microsoft.Web'に存在しません(存在しません)アセンブリ参照?)」
justdan23 2016年

1

上記のいずれかで問題が解決しない場合は、System.Web.Mvc.dllのプロパティを設定して、ローカルtureをコピーします。

それは解決します


1

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

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

お役に立てば幸いです。


1

私のサイトのBin frolderからSystem.Web.dllを削除しました。


私の場合はイムです。MVCのない古いブランチに切り替えていました。そして、Binフォルダー内のSystem.Web.dllが私の画像を壊しました。
andre719mv 2015

1

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

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

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


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>

1

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

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

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


1

ビューを開いた状態でビルドするたびにこれを行うプロジェクトがあります。ビューを閉じるとすぐにエラーがなくなり、ビルドは成功します。非常に奇妙な。


0

私は同じ問題を抱えていて、解決策はどれも私のために機能しませんでした、最後に私はを削除してSystem.Web.MVC再び追加しましたその後、すべてが正常に戻り、私の問題は解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.