构建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。Ajax, System.Web.Mvc.Html等等?为什么我得到错误?


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

运行时版本:v4.0.30319,

Version: 3.0.0.0

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

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运行并且默认站点的应用程序池设置为. net 2.0版本时,这个程序通常会捕获我。当从visual studio使用IIS时,它会创建一个虚拟目录,但仍然在默认站点的应用程序池下运行。 如果使用内置web服务器,右键单击您的web项目,转到属性,并确保您在正确的。net版本下运行。 在IIS上检查你的应用程序池上的。net版本。

从我的上一个关于如何创建项目的评论-你是否正确地包括程序集,如下所示(取自默认的web。由VS10中的MVC3项目模板生成的配置文件):

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

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


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

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

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

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


考虑到问题的日期,这个答案有点晚了,但有人可能会发现它很有用。

以上的解决方案对我在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”。


不管出于什么原因,我的解决方案中有两个web项目以某种方式自发地卸载asp.net MVC。我从Nuget安装了它,现在它们都重新工作了。这发生在最近一批windows更新之后,其中包括我正在使用的版本(4.5.1)的.net框架更新。

编辑:来自。net Web开发和工具博客:

微软的Asp。Net MVC安全更新MS14-059打破了我的构建!


我的解决方案是管理Nuget包的解决方案…—我有许多包需要更新。

让我后退半步,说我把自己搞砸了,因为我把解决方案和项目从一个文件夹移动到另一个文件夹……因此,与项目设想的情况相比,事情已经不正常了。一切都移动得很好,但显然Nuget变得困惑,除非你使用与我不同的方法。

回到解决方案…我只是去管理Nuget包的解决方案…>>更新>>微软和。net并点击更新所有按钮。

一切都恢复了正常和幸福。


我下载了一个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.

如果以上任何一个都不能解决你的问题,只需设置System.Web.Mvc.dll的属性来复制本地true。

它会解决


你需要更新MVC。

进入“工具-> NuGet包管理器->管理解决方案的NuGet包” 点击“更新” 更新“Microsoft ASP. exe”。净MVC” 重建方案


Copy Local = True是解决我的一个项目。但在另一个项目中,我得到了同样的错误,试图设置复制本地= true,但它没有解决我的问题。在项目属性中将目标框架从4.5.1更改为4.5有助于解决这个问题。


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

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

我希望这对你有所帮助。


我也有同样的问题,但上面的方法对我都没用。不过他们确实帮我找到了正确的方向。

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

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

找到这个引用=>删除它=>重新添加它

这为我解决了问题。 希望这能有所帮助


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


查看并检查csproj中的引用路径。

我已经删除了对System.Web.Mvc(和其他)的引用,并将它们读取到自定义路径。C: \ \ 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>

路径仅为示例。


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


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

update-package microsoft.aspnet.mvc -reinstall

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


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

我的解决办法是安装MVC 3(我是通过web平台安装程序安装的)。

我怀疑,随着.net框架的不断发展,人们不再安装旧的MVC,这将成为人们的解决方案。


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

我试图调用system。web。mvc。html。部分(“< >部分页")

System.Web.Mvc.Html是一个命名空间,而不是一个类,我没有读我的错误消息那么好,所以我解释我的错误类Html不存在于命名空间System.Web.Mvc,这就是我如何结束在这里(愚蠢的我知道)。

我所需要做的就是添加一个using语句@using System.Web.Mvc.Html到我的页面,然后@Html。部分工作如预期。


很可能将DLL设置为CopyLocal/true或任何其他主要修复程序将解决您的问题,但这里有另一个边缘情况,让我浪费了20分钟的时间。

当您将名称空间添加到Views/Web时。配置,确保它们的大小写正确:

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

好吧,很多人似乎都经历过这个问题。我的问题是由于引用具有指向其他项目的bin文件夹的路径,或者引用来自系统文件夹的dll。这个项目已经有6年的历史了,之前的开发人员决定用这种方式引用他们的库。

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

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


我有一个项目,每当我在视图打开的情况下构建时,它都会这样做。一旦我关闭了视图,错误就消失了,构建就成功了。很奇怪。


就像经常发生的那样,其他答案中的所有激进步骤对我来说都是不必要的。相反,我有一个错误没有被正确标记。我的建议是,在做任何过激的事情之前,先阅读这条信息!

这个错误说:

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

一旦我纠正了这个错误(我使用了错误的名称空间来引用视图模型),一切都完美地工作了!