222

构建 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包括 librarySystem.Web.Mvc.AjaxSystem.Web.Mvc.Html其他?为什么我会收到错误消息?


在 References 文件夹中,我有 System.Web.Mvc

Runtime version: v4.0.30319,

Version: 3.0.0.0

网页配置

<?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>
4

23 回答 23

424

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

将 Copy Local 属性设置为 True 或 False

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

  • 打开项目的引用节点。
  • 右键单击“引用”列表中的引用,然后单击“属性”。与该引用关联的属性出现在“属性”窗口的列表中。
  • 在“属性”窗口中,将“复制本地”属性更改为 True 或 False。
于 2012-10-31T00:31:50.523 回答
60

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

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

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

于 2014-10-16T01:15:21.000 回答
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>
于 2012-06-17T13:17:09.830 回答
31

您需要更新 MVC。

  1. 转到工具-> NuGet 包管理器-> 管理解决方案的 NuGet 包
  2. 点击“更新”
  3. 更新“Microsoft ASP.NET MVC”
  4. 重建解决方案
于 2014-11-07T19:31:31.180 回答
28

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

于 2012-10-29T12:55:58.797 回答
16

我的解决方案在为解决方案管理 Nuget 包下... - 我有很多更新要做很多包。

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

回到解决方案...我只是去了管理 Nuget Packages for Solution... >> Updates >> Microsoft and .NET并点击Update All 按钮

一切都恢复了正常和快乐。

于 2014-10-18T15:06:39.340 回答
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.
于 2014-10-24T03:48:48.280 回答
8

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

update-package microsoft.aspnet.mvc -reinstall
于 2015-10-13T14:55:47.733 回答
6

鉴于问题日期,这个答案相当晚,但有人可能会发现它很有用。

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

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

于 2014-03-06T21:19:23.773 回答
4

我有同样的问题,但以上都没有为我工作。他们确实把我引向了正确的方向。

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

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

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

那为我修好了。希望这可以帮助

于 2015-08-05T08:26:46.543 回答
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>

路径只是一个示例。

于 2015-09-24T00:14:38.620 回答
3

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

于 2015-11-03T19:46:40.250 回答
2

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

于 2014-11-10T13:31:51.117 回答
2

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

我试图打电话System.Web.Mvc.Html.Partial("<Partial Page>")

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

我需要做的就是在@using System.Web.Mvc.Html我的页面中添加一个 using 语句,然后@Html.Partial按预期工作。

于 2016-06-09T17:22:28.113 回答
1

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

它会解决

于 2014-10-30T10:38:40.723 回答
1

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

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

我希望有帮助。

于 2014-12-29T15:47:16.197 回答
1

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

于 2015-09-30T07:45:05.047 回答
1

我遇到了这个问题,打开和关闭本地复制等不起作用。该项目没有使用 nuget,因此围绕该问题的修复也是不可能的。

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

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

于 2016-03-31T13:56:21.523 回答
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>
于 2016-09-15T14:00:32.117 回答
1

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

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

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

于 2018-05-29T14:15:04.427 回答
1

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

于 2019-08-06T14:32:01.190 回答
0

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

于 2015-08-30T15:23:06.193 回答
0

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

错误说:

在此处输入图像描述

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

在此处输入图像描述

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

于 2021-07-15T09:09:29.647 回答