System.web.mvc缺失

时间:2014-10-23 18:45:01

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

自上周的安全更新以来,我们在VS2010中构建了一个旧的ASP.NET MVC 3 Web应用程序,无法编译。

问题是对System.Web.Mvc.dll的引用被破坏了。

当我在我的构建机器上打开解决方案文件时,安全更新尚未运行,并打开References-> System.Web.MVC的属性对话框,它看起来很好。

路径是C:\ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll 版本是3.0.0.0

但是当我在运行安全更新的开发计算机上打开解决方案文件时,References-> System.Web.MVC被标记为缺失。如果我将其删除,并尝试使用VS2010的“添加引用”对话框将其添加回来,则无法显示。

在网上闲逛让我得到了使用NuGet更新MVC的建议。在我们的VS2010项目中,我们没有使用NuGet,因此对于这种情况看起来并不合适。无论如何我试过了,最后还有六个遗失的参考文献。

当我查看" C:\ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll"的属性时在Windows资源管理器中,在构建计算机上,我看到版本3.0.0.0。

当我查看开发机器上的属性时,我看到版本3.0.50813.1。

我需要的是一种改变构建和运行方式的方法,这样我就可以构建和运行.NET 3.0框架中安装的这两个DLL中的哪一个。

想法?

我尝试过的没有用的

首次尝试 - 如果缺少装配,请添加它。我删除了旧的遗失参考。然后我从" ASP.NET MVC3 \ Assemblies"复制了DLL。文件夹,进入我项目的文件夹。将其设置为"始终复制",并将其添加为参考。

有了这个,项目将在VS2010中编译,但是当我尝试使用aspnet_compiler预编译页面时,我收到了警告:

(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy

到目前为止,我已经设法避免了解运行时策略,但我尝试在web.config中添加它:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

再次尝试,并得到了同样的警告。

我的问题是 - 我还有问题吗?或者我会解决它,尽管有警告?

10 个答案:

答案 0 :(得分:124)

通过NuGet获取最新版本的MVC3。在Dev Studio中打开您的项目。打开Dev Studio底部的Package Manager Console选项卡。然后使用此命令:

PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

如果在&#34; -Version&#34;之后单击Tab键。您将获得所有可用版本的列表。

如果你有一个旧版本的NuGet,你可能会收到一个错误,表明你必须升级它。如果是这样,请打开Tools-&gt; Extension Manager以安装最新版本的NuGet。注意,您需要以管理员身份运行Dev Studio才能安装NuGet。

安装MVC3应该更新项目中的Web.config。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" />
  </dependentAssembly>
</assemblyBinding>

答案 1 :(得分:26)

MVC 5

C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

MVC 4

C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll

MVC 3

C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll

MVC 2

C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Where can I find System.Web.MVC dll in a system where MVC 3 is installed?

答案 2 :(得分:17)

解决此问题的最简单方法是从Web平台安装程序安装ASP.NET MVC 3。

enter image description here

http://www.microsoft.com/web/downloads/

或者使用Nuget命令

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

答案 3 :(得分:2)

我遇到了同样的情况:Visual Studio 2010,没有安装NuGet,以及使用System.Web.Mvc版本3的ASP.NET应用程序。

对我来说有用的是设置每个使用System.Web.Mvc的C#项目,转到Solution Explorer中的References,并在System.Web.Mvc上设置属性,Copy Local为true,以及Specific Version为false - 最后一个导致Version字段显示该机器上的当前版本。

答案 4 :(得分:1)

如果在vs2017中出现此问题,我已经通过nuget获得了MVC,但System.Web.Mvc没有出现在“添加引用”下的“程序集”列表中。

解决方案是在“添加引用”对话框的“装配”下选择“扩展”。

答案 5 :(得分:1)

在VS 2017中,我清理了解决方案并对其进行了重建并对其进行了修复

答案 6 :(得分:0)

在我的案例中,我在项目中拥有所有适当的引用。我发现通过构建解决方案,nuget包会自动恢复。

答案 7 :(得分:0)

在vs2015中打开的示例mvcmusicstore.codeplex.com错过了一些引用,其中一个是System.web.mvc。

对此的修复是从引用中删除它并添加引用: 选择Assemblies下的 Extentions ,您可以在那里找到并添加System.Web.Mvc。

(我使用nuget包添加的其他程序集。)

答案 8 :(得分:0)

以防万一有人是一个他得到同样错误的位置。在我的情况下,降级Microsoft.AspNet.Mvc,然后再次升级帮助。安装Glimpse并将其删除后,我遇到了这个问题。 System.Web.Mvc以某种方式引用错误,清理解决方案或重建它在我的情况下不起作用。如果上述答案都不适合你,请尝试试试。

答案 9 :(得分:0)

再次从./packages/Microsoft.AspNet.Mvc。[版本] /lib/net45/System.Web.Mvc.dll添加引用。