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

时间:2012-06-17 12:46:42

标签: c# asp.net-mvc-3

Buiding 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的解决方案安装了数据包,并为所有项目设置MVC3MVC3是否包含图书馆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>

23 个答案:

答案 0 :(得分:418)

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

将Copy Local属性设置为True或False

在Solution Explorer中,单击Show All Files按钮以显示References节点。

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

答案 1 :(得分:60)

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

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

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

答案 2 :(得分: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>

答案 3 :(得分:30)

您需要更新MVC。

  1. 转到工具 - &gt; NuGet包管理器 - &gt;管理解决方案的NuGet包
  2. 点击“更新”
  3. 更新“Microsoft ASP.NET MVC”
  4. 重建解决方案

答案 4 :(得分:28)

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

答案 5 :(得分:16)

我的解决方案是在管理Nuget软件包以寻求解决方案...... - 我对很多软件包进行了无数次更新。

让我支持半步并说我搞砸了自己,因为我将解决方案和项目从一个文件夹移动到另一个文件夹......所以事情已经完全没有了,与项目所考虑的事情相比。一切都移动得很好,但显然Nuget变得困惑,除非你使用与我不同的方法。

回到解决方案......我只是去管理Nuget包以寻求解决方案...... &gt;&gt; 更新&gt;&gt; Microsoft和.NET ,然后点击全部更新按钮

一切都恢复正常和快乐。

答案 6 :(得分: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?)

- &gt;我来到这个网页并尝试了一些清洁和以上的一些事情......

对我有用的只是

Manage Nuget and Update all the packages.  Then it worked fine.

答案 7 :(得分:7)

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

Option Explicit

Sub Shifts_ChangeOver_Count()
Const kShifts As String = "a,b,c,d,e,f,g,h,i,j,k"
Dim rSrc As Range, rTrg As Range
Dim sFmlR1C1 As String, sRef1 As String, sRef2 As String, sRef3 As String
Dim rTmp As Range, sShifts As String, iCol As Integer
Dim blFntBld As Boolean, blNbrFmt As Boolean
Dim b1 As Byte, b2 As Byte
Dim sLabel As String

    Application.ScreenUpdating = False

    Rem Set Ranges
    With ThisWorkbook.Sheets("Sht(1)")  'Change the name of the worksheet as required
        Set rSrc = .Range("L11:U20")    'Update the range as required
        Set rTrg = .Range("AH11:AR21")  'Update the range as required
    End With

    Rem Builts Shift Changeovers
    With rSrc

        Rem Add First Changeover
        sShifts = "|" & .Cells(1).Value2 & .Cells(.Cells.Count).Value2 & "|"

        Rem Add Changeovers by Row
        For iCol = 1 To .Columns.Count - 1
            For Each rTmp In .Columns(iCol).Cells
                With rTmp
                    sShifts = sShifts & .Value2 & .Offset(0, 1).Value2 & "|"
        End With: Next: Next

        Rem Add Changeovers Cross Rows
        For b1 = 1 To -1 + .Rows.Count
            sShifts = sShifts & .Cells(b1, .Columns.Count).Value2 & _
                .Cells(1 + b1, 1).Value2 & "|"

    Next: End With

    Rem Calculate Changeovers
    With rTrg

        Rem Set Titles Rows
        Set rTmp = .Rows(1).Offset(-1, 0)
        blFntBld = 1: GoSub Rng_Formatting
        rTmp.Value = Split(kShifts, Chr(44))
        rTmp.ColumnWidth = 5

        Rem Set Titles Cols
        Set rTmp = .Columns(1).Offset(0, -1)
        blFntBld = 1: GoSub Rng_Formatting
        rTmp.Value = Application.Transpose(Split(kShifts, Chr(44)))

        Rem Counting ChangeOvers
        Set rTmp = .Cells
        blNbrFmt = 1: GoSub Rng_Formatting
        sRef1 = .Cells(1).Offset(-1, -1).Address(1, 1, xlR1C1)
        sRef2 = .Cells(1).Offset(0, -1).Address(0, 1, xlR1C1, , .Cells(1))
        sRef3 = .Cells(1).Offset(-1, 0).Address(1, 0, xlR1C1, , .Cells(1))
        Set rTmp = .Cells(1).Offset(-1, -1)
        sLabel = rTmp.Value2
        Rem rTmp.Font.Color = RGB(255, 255, 255)
        rTmp.Value = sShifts
        sFmlR1C1 = "=( LEN( " & sRef1 & " )" & _
            "- LEN( SUBSTITUTE( " & sRef1 & ", " & sRef2 & " & " & sRef3 & ", """" ) ) ) / 2"
        .FormulaR1C1 = sFmlR1C1

        Rem Total Shifts
        Set rTmp = .Columns(1 + .Columns.Count)
        GoSub Rng_Formatting
        sRef1 = rSrc.Address(1, 1, xlR1C1)
        sRef2 = .Cells(1).Offset(0, -1).Address(0, 1, xlR1C1, , .Cells(1))
        sFmlR1C1 = "=COUNTIF( " & sRef1 & ", " & sRef2 & " )"
        rTmp.FormulaR1C1 = sFmlR1C1

        Rem Grand Total Shifts
        sFmlR1C1 = "=CONCATENATE( ""Shifts: "" , CHAR(10) , " & _
            "SUM( " & rTmp.Address(1, 0, xlR1C1, , rTmp.Cells(1)) & ") )"
        Set rTmp = rTmp.Cells(1).Offset(-1, 0)
        blFntBld = 1: GoSub Rng_Formatting
        GoSub Grand_Totals
        rTmp.ColumnWidth = 6

        Rem Total Changeovers
        Set rTmp = .Rows(1 + .Columns.Count)
        GoSub Rng_Formatting
        sRef1 = .Columns(1).Address(1, 0, xlR1C1, , .Cells(1))
        sFmlR1C1 = "=SUM( " & sRef1 & " )"
        rTmp.FormulaR1C1 = sFmlR1C1

        Rem Grand Total Changeovers
        sFmlR1C1 = "=CONCATENATE( ""Changeovers: "" , CHAR(10) , " & _
            "SUM( " & rTmp.Address(0, 1, xlR1C1, , rTmp.Cells(1)) & ") )"
        Set rTmp = rTmp.Cells(1).Offset(0, -1)
        blFntBld = 1: GoSub Rng_Formatting
        GoSub Grand_Totals
        rTmp.ColumnWidth = 13

        Rem Replace Formulas with values
        .Calculate
        .Value = .Value2

        Rem Reset Title
        Set rTmp = .Cells(1).Offset(-1, -1)
        rTmp.Value = sLabel
        Rem blFntBld = 1: GoSub Rng_Formatting
        Rem rTmp.Font.ColorIndex = xlAutomatic

    End With

    Application.ScreenUpdating = 1

Exit Sub
Rng_Formatting:
    Rem Range Formating
    With rTmp
        .Interior.Color = RGB(255, 255, 255)
        If blNbrFmt Then .NumberFormat = " # ; -# ;"""";@"
        If blFntBld Then .Font.Bold = True
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders.LineStyle = xlContinuous
        .Borders.Color = RGB(128, 128, 128)
        .BorderAround Weight:=xlMedium, Color:=RGB(128, 128, 128)
        .Borders(xlInsideHorizontal).Weight = xlThin
        .Borders(xlInsideVertical).Weight = xlThin
    End With
    blNbrFmt = 0
    blFntBld = 0
    Return

Grand_Totals:
    Rem Grand Totals Formatting
    With rTmp
        .FormulaR1C1 = sFmlR1C1
        .Columns.AutoFit
        .WrapText = True
        .Rows.AutoFit
    End With
    Return

End Sub

答案 8 :(得分:6)

考虑到问题日期,这个答案已经很晚了,但有人可能觉得它很有用。

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

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

答案 9 :(得分:4)

我遇到了同样的问题,但以上都没有对我有用。他们确实让我朝着正确的方向前进。

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

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

找到此参考=&gt;删除它=&gt;重新添加

为我修好了。 希望这有帮助

答案 10 :(得分:3)

查看并检查csproj中的参考路径。

我删除了对System.Web.Mvc(和其他人)的引用,并将它们重新读入自定义路径。 C:\Project\OurWebReferences

然而,执行此操作后,仍然csproj中的引用路径没有改变。 WAS

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

路径只是一个例子。

答案 11 :(得分:3)

对我来说,解决方案是确保所有项目都在为同一个CPU构建 - 在我的情况下是x86

答案 12 :(得分:2)

Copy Local = True解决了我的一个项目。但在另一个项目中,我得到了同样的错误,试图设置Copy Local = true,但它没有解决我的问题。在Project Properties中将Target框架从4.5.1更改为4.5。

答案 13 :(得分:2)

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

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

System.Web.Mvc.Html是一个名称空间,而不是一个类,我没有很好地读取我的错误消息,所以我解释了我的错误,因为名称空间中不存在类Html System.Web.Mvc以及我如何在这里结束(我知道这很愚蠢)。

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

答案 14 :(得分:1)

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

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

我希望有所帮助。

答案 15 :(得分:1)

我已从我网站的Bin模板中删除了System.Web.dll。

答案 16 :(得分:1)

如果以上任何一项都无法解决您的问题,只需设置System.Web.Mvc.dll的属性即可复制本地化。

它将解决

答案 17 :(得分:1)

我有这个问题,设置复制本地打开和关闭等不起作用。 该项目没有使用nuget所以修复它也是不可能的。

我的修复是安装MVC 3(我通过网络平台安装程序完成)。

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

答案 18 :(得分: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>

答案 19 :(得分:1)

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

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

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

答案 20 :(得分:1)

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

答案 21 :(得分:0)

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

答案 22 :(得分:0)

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

错误说:

enter image description here

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

enter image description here

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