缺lessSystem.web.mvc

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

问题是对System.Web.Mvc.dll的引用已损坏。

当我打开我们的生成机器上的解决scheme文件,安全更新没有运行,并打开引用 – > System.Web.MVC属性对话框,它看起来很好。

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

但是,当我在运行安全更新的开发机器上打开解决scheme文件时,References-> System.Web.MVC被标记为缺失。 如果我删除它,并尝试使用VS2010的添加引用对话框添加它,它不会显示。

徘徊在networking导致我build议涉及使用NuGet更新MVC。 在我们的VS2010项目中,我们没有使用NuGet,所以对于这种情况看起来不太合适。 无论如何,我都试过了,最后还有六个缺less的参考文献。

当我在Windows资源pipe理器中查看“C:\ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll”的属性时,在生成机器上看到版本3.0.0.0。

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

我需要的是一种方法来改变我构build和运行的方式,以便我可以构build和运行,而不pipe.NET 3.0框架中安装的这两个DLL中的哪一个。

想法?

我曾尝试过的,没有奏效

首先尝试 – 如果程序集丢失,添加它。 我删除了旧的缺less的参考。 然后,我将“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> 

试了一遍,得到了同样的警告。

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

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

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

如果您在“-Version”之后单击Tab键,您将获得所有可用版本的列表。

如果你有一个旧版本的NuGet,你可能会收到一个错误提示你必须升级它。 如果是这样,打开工具 – >扩展pipe理器来安装最新版本的NuGet。 请注意,您需要先以pipe理员身份运行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> 

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

我在哪里可以find安装了MVC 3的系统中的System.Web.MVC dll?

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

在这里输入图像说明

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

或者使用Nuget命令

 Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1 

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

对我来说,是设置每个使用System.Web.Mvc的C#项目,在解决scheme资源pipe理器中转到参考,并在System.Web.Mvc上设置属性,将Copy Local设置为true,将Specific Version设置为false – 最后一个导致版本字段显示该机器上的当前版本。

在我的情况下,我在我的项目中有所有适当的参考。 我发现通过构build解决scheme,nuget包被自动恢复。

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

解决方法是从引用中删除它,并添加引用:在Assemblies下selectExtentions,在那里可以find并添加System.Web.Mvc。

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