类型或名称空间名称在名称空间“ 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并为所有项目设置了数据包MVC3。不MVC3包括图书馆System.Web.Mvc.AjaxSystem.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 2014年

Answers:


420

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

将“复制本地”属性设置为True或False

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

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

11
太棒了!这为我修复了一个MVC4项目。当您考虑它时,这是显而易见的。我从没看过已部署的项目来查看DLL是否存在。
亚历克斯·基帕特里克

1
谢谢!这也帮助了我!
Maritim 2013年

1
别客气。有时,通过简单的解决方案可以解决复杂的问题。:)
太妃糖

5
有用!我只更改了一个引用=>System.Web.Mvc
Jaider 2014年

5
花了我一段时间来弄清楚“那些文件”的含义。解决方案中每个项目上的程序集引用,路径中带有“ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies”之类的内容都是问题的一部分。
2014年

60

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

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

Microsoft Asp.Net MVC安全更新MS14-059破坏了我的构建!


4
这只是发生在我身上。但是,我更新了我的MVC软件包,而不是重新安装它们(无论如何我的都已经过时了)。是否有发生这种情况的来源或原因?
2014年

5
这似乎与KB2994379KB2992080有关,具体取决于您所引用的MVC版本(分别为5.1和5.0)。该更新提供了System.Web.Mvc的新版本,我认为这会引入版本控制冲突。更新您的MVC软件包将解决此错误。如果由于某种原因无法更新,则需要将System.Web.Mvc.dll设置为在本地复制。
尼·凯利2014年

1
我有同样的问题。更新软件包并设置copy local = true。感谢大家!!!!
Vackup 2014年

1
MVC复制本地= true +1。
Stanomatic

4
我也一样 必须设置MVC以复制local = FALSE,重新生成,复制local = TRUE,重新生成。都好。
Jeppebm

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 2012年

通常,这意味着它将设置为4.5运行,但实际上正在以其他方式运行,这意味着它无法在System.Web.Mvc中找到System.Web.Mvc.Ajax。
BlackSpy 2012年

顺便说一句,您的System.Web.dll版本是什么?我问的原因是您说您是从NuGet添加程序集的-您是否没有创建MVC3 Web项目?
BlackSpy 2012年

31

您需要更新MVC。

  1. 转到工具-> NuGet软件包管理器->管理NuGet软件包以获取解决方案
  2. 点击“更新”
  3. 更新“ Microsoft ASP.NET MVC”
  4. 重建解决方案

1
使用NuGet软件包很好,但是可以下载大量不需要的其他程序集,但这将对其进行修复。
Canvas 2015年

1
有同样的问题,有一些赏金。
尼特

28

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


16

我的解决方案在“ 为解决方案管理Nuget程序包...”下 –我对许多程序包进行了大量更新。

让我备份半步,说我搞砸了,因为我将解决方案和项目从一个文件夹移到了另一个文件夹...因此,与项目认为的情况相比,事情已经不那么容易了。一切都进行得很好,但是除非您使用与我不同的方法,否则Nuget显然会感到困惑。

返回解决方案...我只是去管理解决方案的Nuget包... >> 更新 >> Microsoft和.NET,然后单击Update All按钮

一切恢复了正常和幸福。


我发布的同类型解决方案不小心为您跳过了您的信息+1
Tom Stickel 2014年

这也是我的解决方法。
bradj

请注意,执行此操作后,您可能还需要更新JQuery和Bootstrap
Carl Onager 2014年

更新MVC,剃须刀和网页nuget软件包在MVC5项目中对我有用。
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在说同样的话。支持他。
汤姆·斯蒂克2014年

7

在nuget软件包管理器中运行以下命令为我修复了该问题:

update-package microsoft.aspnet.mvc -reinstall

2
这需要重新投票大约一千次。
Chazt3n

1
@ Chazt3n没为我工作,但这是一个好建议,所以+ 1
Jared Beach

我尝试了所有其他方法,并且从技术上讲,使用包管理器进行了卸载,重新安装和更新,但没有成功。所以我对这个答案感到悲观,但绝望。这以某种方式起作用。
Mahesh

6

给出问题的日期,这个答案还很晚,但是有人会发现它很有用。

在本地项目Net Framework 4.5 MVC 4上的Visual Studio 2012中,以上解决方案都不对我有用。 Articles / 615805 /创建干净的最小足迹ASP-NET-WebAPI当我遇到这个问题时,)。

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


谢谢。这解决了我的问题(虽然与DevExpress.Web.Mvc有关)
dferraro

+1。我使用的是MvcSiteMapProvider,由于它不适用于MVC的最新程序集,因此无法通过nuget对Microsoft ASP.Net MVC程序包进行“全部更新”。另一个建议是,您可能需要为此程序集执行“ CopyLocal = True”。
user007

只需要将调试Web应用程序推送到新环境即可。需要在参考中添加“本地复制”。
dudeNumber4

4

我遇到了同样的问题,但是以上都不适合我。他们确实使我朝着正确的方向前进。

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

我有多个项目依赖于我的解决方案中的System.Web.Mvc参考,但是只有一个项目引起了此问题。在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

Copy Local = True解决了我的一个项目。但是在另一个项目中,我遇到了相同的错误,试图将Copy Local = true设置,但是并不能解决我的问题。在项目属性中将Target框架从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会在不需要时标记使用,但是如果您将其删除,则会出现类似以下错误:“名称空间'Microsoft.Web'中不存在类型或名称空间名称'Helpers'(丢失了吗?组装参考?)”。
justdan23 '16

1

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

它会解决


1

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

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

希望对您有所帮助。


1

我已经从网站的Bin文件夹删除了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上的任何软件包,我在软件包旁边创建了另一个文件夹,并将dll放在与NuGet相同的布局中。

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


1

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.