命名空间“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.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>
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("<Partial Page>")
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”(是否缺少程序集引用?)