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
的解决方案安装了数据包,并为所有项目设置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>
答案 0 :(得分:418)
清理解决方案,然后将这些文件的属性设置为Copy Local = True
。
将Copy Local属性设置为True或False
在Solution Explorer中,单击Show All Files按钮以显示References节点。
答案 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。
答案 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)