web-dev-qa-db-ja.com

型または名前空間の名前が名前空間 'System.Web.Mvc'に存在しません

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を使用してソリューション用のパケットをインストールし、すべてのプロジェクトMVC3用にセットアップしました。 MVC3にはSystem.Web.Mvc.AjaxSystem.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>

_ 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>
214
J.Olufsen

ソリューションをクリーンにしてから、それらのファイルのプロパティーをCopy Local = Trueに設定してください。

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

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

  • プロジェクトの「参照」ノードを開きます。
  • [参照設定]ボックスの一覧で参照を右クリックし、[プロパティ]をクリックします。その参照に関連付けられているプロパティは、[プロパティ]ウィンドウのリストに表示されます。
  • プロパティウィンドウで、Copy LocalプロパティをTrueまたはFalseに変更します。
418
Toffee

どういうわけか、私の解決策のうちの2つはどういうわけかasp.net MVCを自然にアンインストールしたウェブプロジェクトを持っています。私はNugetからそれをインストールしました、そして今、彼らは両方とも再び働きます。これは、私が使用していたバージョン(4.5.1)用の.netフレームワークアップデートを含む、最近のWindowsアップデートのバッチの後に起こりました。

編集:.Net Web開発およびツールブログから:

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

60
Chris

私が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>
38
BlackSpy

MVCをアップデートする必要があります。

  1. [ツール] - > [NuGetパッケージマネージャ] - > [ソリューション用NuGetパッケージの管理]の順に選択します
  2. 「アップデート」をクリックしてください
  3. "Microsoft ASP.NET MVC"を更新します。
  4. ソリューションを再構築する
30
Matt

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

28
Peter Munnings

私のソリューションは ソリューションのためのNugetパッケージの管理... - の下にありました - 私はかなりの数のパッケージのためにするべき多数のアップデートがありました。

ソリューションを1つのフォルダから別のフォルダに移動したため、私は自分を台無しにしてしまったと言いましょう。すべてうまくいっていますが、どうやらNugetは私とは異なるアプローチをとらない限り混乱します。

解決策に戻る.../ - 解決策のためのManage Nuget Packages ... >> Updates >> Microsoftと.NET そして Update Allボタンを押してください

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

16
azarc3

私は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.
9
Tom Stickel

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

update-package Microsoft.aspnet.mvc -reinstall
7
user1477388

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

上記のソリューションはどれも、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」を明示的に追加することでした。

6
Sean

私は同じ問題を抱えていたが、上記のどれも私のために働かなかった。しかし彼らは私を正しい方向に導きました。

たとえば、System.Web.Mvc参照の "Copy Local"を "true"に設定すると、自動的にFalseに設定されます。

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

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

それは私のためにそれを修正しました。お役に立てれば

4
bohem.be

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
Valamas

私にとっては、すべてのプロジェクトが同じCPU用に構築されていることを確認することが解決策でした。私の場合はx86です。

3
Rob Bowman

Copy Local = 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ステートメント@using System.Web.Mvc.Htmlを追加することだけでしたそしてそれから@Html.Partialは期待通りに働いた。

2
Jared Beach

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

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

お役に立てば幸いです。

1
freedeveloper

上記のいずれかがあなたの問題を解決しないならば、単にローカルtureをコピーするためにSystem.Web.Mvc.dllのプロパティを設定します。

それは解決します

1
Ramakrishna

私はこの問題を抱えていた、コピーローカルのオン/オフなどを設定することがうまくいかなかった。このプロジェクトは無駄なものを使用していなかったので、それに関する修正も問題外でした。

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

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

1
4imble

私のサイトのBinフォルダからSystem.Web.dllを削除しました。

1
andre719mv

DLLをCopyLocal/trueまたはその他の主要な修正に設定すると問題が解決する可能性がありますが、ここでは20分の無駄な時間がかかったもう1つのEdgeケースを紹介します。

あなたの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
John

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

0
Mark Good

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

0
Sirwan Afifi