命名空间“System.Web.Mvc”中不存在类型或命名空间名称

Posted

技术标签:

【中文标题】命名空间“System.Web.Mvc”中不存在类型或命名空间名称【英文标题】:The type or namespace name does not exist in the namespace 'System.Web.Mvc' 【发布时间】:2012-06-19 17:55:07 【问题描述】:

构建MVC3解决方案进展顺利,但浏览器出现错误:

编译器错误消息:CS0234:名称空间“System.Web.Mvc”中不存在类型或名称空间名称“html”(您是否缺少程序集引用?)

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>

【问题讨论】:

你的网络服务器是什么?这是在 iis 中吗? 在 Visual Studio 2012 中表达 IIS 你项目的目标是什么? 相关:System.Web.MVC not copied to bin folder since MS14-059 取决于谁提出了这个问题 - 这就是我们中的一些人所需要的所有解决方案管理 Nuget 包... >> 更新 【参考方案1】:

清理您的解决方案,然后将这些文件的属性设置为 Copy Local = True

将 Copy Local 属性设置为 True 或 False

在解决方案资源管理器中,单击“显示所有文件”按钮以显示“引用”节点。

打开项目的引用节点。 右键单击“参考”列表中的参考,然后单击“属性”。 与该引用关联的属性显示在“属性”窗口的列表中。 在“属性”窗口中,将“复制本地”属性更改为 True 或 False。

【讨论】:

太棒了!这为我在 MVC4 项目中修复了它。当您考虑它时,这很明显。我从未查看已部署的项目以查看 DLL 是否存在。 谢谢!这也帮助了我! 不客气。有时复杂的问题可以通过简单的解决方案来解决。 :) 有效!我只更改了一个参考 => System.Web.Mvc 我花了一点时间才弄清楚“那些文件”是什么意思。浏览解决方案中每个项目的程序集引用,路径中带有“Microsoft ASP.NET\ASP.NET MVC 3\Assemblies”之类的任何内容都是问题的一部分。【参考方案2】:

无论出于何种原因,我的两个解决方案都有 Web 项目,它们以某种方式自发地卸载了 asp.net MVC。我从 Nuget 安装了它,现在它们都再次工作了。这发生在最近一批 Windows 更新之后,其中包括针对我正在使用的版本 (4.5.1) 的 .net 框架更新。

编辑:来自 .Net Web 开发和工具博客:

Microsoft Asp.Net MVC Security Update MS14-059 broke my build!

【讨论】:

这只是发生在我身上。但是,我更新了我的 MVC 包而不是重新安装它们(无论如何我的包已经过时了)。发生这种情况是否有来源或原因? 这看起来与 KB2994379 或 KB2992080 有关,具体取决于您引用的 MVC 版本(分别为 5.1 和 5.0)。该更新提供了一个新版本的 System.Web.Mvc,我认为它会引入版本冲突。更新您的 MVC 包将修复该错误。如果由于某种原因无法更新,则需要将 System.Web.Mvc.dll 设置为本地复制。 我遇到了同样的问题。更新包并设置 copy local = true。谢谢大家!!!! MVC 复制本地 = true +1。 同样的事情发生在我身上。必须将 MVC 设置为复制本地 = FALSE,重建,复制本地 = TRUE,重建。都很好。【参考方案3】:

当我从 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>

【讨论】:

所有项目都设置为使用 .NET Framework 4.5。是不是说.NET 4.5找不到System.Web.Mvc.Ajax等类? 通常这意味着它被设置为以 4.5 运行,但实际上以其他方式运行意味着它在 System.Web.Mvc 中找不到 System.Web.Mvc.Ajax。 顺便问一下,您的 System.Web.dll 版本是什么?我问的原因是您说您从 NuGet 添加了程序集 - 您没有创建 MVC3 Web 项目吗?【参考方案4】:

您需要更新 MVC。

    转到工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包 点击“更新” 更新“Microsoft ASP.NET MVC” 重建解决方案

【讨论】:

使用 NuGet 包很好,但是可以下载大量其他可能不需要的程序集,但这会解决它。 有同样的问题,有一些赏金。【参考方案5】:

我遇到了同样的问题 - 我的情况是我从 lib 文件夹中引用新的 System.Web.Mvc.dll 并且我没有将“复制本地”设置为 true。然后应用程序恢复到 GAC 中没有正确命名空间(Html、Ajax 等)的版本,并给我运行时错误。

【讨论】:

【参考方案6】:

我的解决方案位于 Manage Nuget Packages for Solution... —— 我需要为很多包进行大量更新。

让我后退半步,说我把自己搞砸了,因为我将解决方案和项目从一个文件夹移到另一个文件夹......所以与项目设想的情况相比,事情已经不正常了。一切顺利,但显然 Nuget 会变得混乱,除非您使用与我不同的方法。

回到解决方案...我只是去了 Manage Nuget Packages for Solution... >> 更新 >> Microsoft和.NET strong> 并点击全部更新按钮

一切都恢复正常和快乐。

【讨论】:

我发布了相同类型的解决方案,不小心跳过了你的帖子 +1 这也是我的解决办法。 请注意,执行此操作后您可能还需要更新 JQuery 和 Bootstrap 在 MVC5 项目中更新 mvc、razor 和网页 nuget 包对我有用。【参考方案7】:

我下载了一个 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.

【讨论】:

哦,我会留下我的帖子,但我看到 azarc3 也在说同样的事情。支持他。【参考方案8】:

在 nuget 包管理器中运行以下命令为我修复了它:

update-package microsoft.aspnet.mvc -reinstall

【讨论】:

这需要再投票一千次左右。 @Chazt3n 对我没用,但这是个好建议,所以 + 1 我尝试了所有其他方法,并在技术上使用包管理器,卸载并重新安装和更新等等。所以我对这个答案很悲观,但很绝望。这以某种方式起作用。【参考方案9】:

考虑到问题的日期,这个答案相当晚,但有人可能会觉得它有用。

在 Visual Studio 2012 的本地项目 Net Framework 4.5 MVC 4 中,上述解决方案均不适用于我。对于上下文,我在运行时正在关注关于在 CodeProject (http://www.codeproject.com/Articles/615805/Creating-a-Clean-Minimal-Footprint-ASP-NET-WebAPI) 上创建准系统 Web Api 的教程进入这个问题。

对我有用的是明确地将“System.Web.Mvc”添加到我的应用程序的引用中,即使应用程序已经引用了“System.Web”。

【讨论】:

谢谢。这解决了我的问题(虽然是 DevExpress.Web.Mvc) +1。我正在使用 MvcSiteMapProvider,由于它不适用于最新的 MVC 程序集,因此我无法通过 nuget 为 Microsoft ASP.Net MVC 包执行“全部更新”。还有一个建议是您可能需要为此程序集执行“CopyLocal=True”。 只需要将调试 Web 应用程序推送到新环境。需要在引用中添加“复制本地”。【参考方案10】:

我遇到了同样的问题,但以上方法都不适合我。不过,他们确实把我引向了正确的方向。

例如,当我将 System.Web.Mvc 引用的“Copy Local”设置为“true”时,它会自动将其设置回 False。

我有多个项目依赖于我的解决方案中的 System.Web.Mvc 引用,但只有一个项目导致了这个问题。 在 VS 2012 中,此引用标有黄色注意三角形。

找到这个参考 => 删除它 => 重新添加它

这为我解决了问题。 希望这会有所帮助

【讨论】:

【参考方案11】:

查看并检查您的 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>

路径只是一个例子。

【讨论】:

【参考方案12】:

对我来说,解决方案是确保所有项目都是为同一个 CPU 构建的——在我的例子中是 x86

【讨论】:

【参考方案13】:

Copy Local = True 解决了我的一个项目。但是在另一个项目中,我得到了同样的错误,试图设置 Copy Local = true,但它不能解决我的问题。在项目属性中将目标框架从 4.5.1 更改为 4.5 有助于解决此问题。

【讨论】:

【参考方案14】:

我做了一些非常愚蠢的事情(也许你也做过)。

我试图打电话给System.Web.Mvc.Html.Partial("&lt;Partial Page&gt;")

System.Web.Mvc.Html 是一个命名空间而不是一个类,我没有很好地阅读我的错误消息,所以我将我的错误解释为命名空间 System.Web 中不存在类 Html。 Mvc,这就是我最终来到这里的方式(我知道这很愚蠢)。

我需要做的就是在我的页面中添加一条 using 语句 @using System.Web.Mvc.Html,然后 @Html.Partial 就可以正常工作了。

【讨论】:

Visual Studio 2015 会将 using 标记为不需要,但如果您让它删除它,您将收到如下错误:“命名空间中不存在类型或命名空间名称 'Helpers' ' Microsoft.Web'(您是否缺少程序集参考?)”。【参考方案15】:

如果以上任何一个都不能解决您的问题,只需将 System.Web.Mvc.dll 的属性设置为复制本地 ture。

会解决的

【讨论】:

【参考方案16】:

我有同样的问题,但在我的情况下是由其他因素引起的。我写这篇文章是为了帮助其他有同样问题的人。 我有多个项目的解决方案。其中两个与 System.Web.Mvc 一起使用,通常我们的引用指向我们控制所用版本的外部包。出于某种原因,项目参考之一转到 GAC 并指向 GAC dll(版本 4.0.0.1)并且程序出现错误。 更正它:

简单检查System.Web.Mvc的引用是否指向同一个目录路径下的同一个dll。

希望对你有所帮助。

【讨论】:

【参考方案17】:

我已经从我网站的 Bin 文件夹中删除了 System.Web.dll。

【讨论】:

我的情况是的。我正在切换到没有 MVC 的旧分支。 Bin 文件夹中的 System.Web.dll 破坏了我的图片。【参考方案18】:

我遇到了这个问题,打开和关闭本地复制等不起作用。 该项目没有使用 nuget,因此也无法解决该问题。

对我来说,解决方法是安装 MVC 3(我通过 Web 平台安装程序完成)。

我怀疑随着 .net 框架的不断发展以及人们不再安装旧的 MVC 东西,这将成为人们更多的解决方案。

【讨论】:

【参考方案19】:

很可能将您的 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>

【讨论】:

【参考方案20】:

好的,看来很多人都遇到了这个问题。我的问题是由具有其他项目的 bin 文件夹路径的引用或从系统文件夹引用 dll 引起的。该项目大约有 6 年的历史,以前的开发人员已经决定这是他们引用库的方式。

解决方案是遍历每个引用并检查路径,然后删除引用并使用 NuGet 添加它。对于不在 NuGet 上的任何包,我在包旁边创建了另一个文件夹,并将 dll 以与 NuGet 相同的布局放入其中。

我还必须检查配置文件并确保使用了正确版本的软件包。一个漫长而痛苦的过程!

【讨论】:

【参考方案21】:

每当我在视图打开的情况下构建时,我都有一个项目执行此操作。一旦我关闭视图,错误就会消失并且构建成功。很奇怪。

【讨论】:

【参考方案22】:

我遇到了同样的问题,没有一个解决方案对我有用,最后我删除了System.Web.MVC 并再次添加然后一切恢复正常,我的问题解决了。

【讨论】:

【参考方案23】:

正如经常发生的那样,其他答案中的所有激进步骤对我来说都是不必要的。相反,我遇到了一个未正确标记的错误。我的建议是在做任何过于激烈的事情之前先阅读该消息!

错误说:

引用的文件是一个临时文件 - 在那里没有多大用处。但是当我对有问题的视图模型 vmPayConfirm 进行全局搜索时,我发现了这个:

一旦我纠正了这个错误(我使用了错误的命名空间来引用视图模型),一切都运行良好!

【讨论】:

以上是关于命名空间“System.Web.Mvc”中不存在类型或命名空间名称的主要内容,如果未能解决你的问题,请参考以下文章

Windows 更新后“命名空间‘System.Web.Mvc’中不存在类型或命名空间名称‘Html’”

CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

System.Web.Mvc.Html 命名空间小计

当前上下文中不存在ViewBag

我可以使用类库中的System.Web.Mvc吗?