自上周的安全更新以来,我们有一个在 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,因此对于这种情况,这似乎不太正确。不管怎样,我都试过了,最后发现有六个缺失的引用。
当我在 Windows 资源管理器中查看“C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll”的属性时,在构建机器上我看到版本 3.0 .0.0.
当我在开发机器上查看属性时,我看到版本 3.0.50813.1。
我需要的是一种改变我构建和运行方式的方法,这样我就可以构建和运行,而不管这两个 DLL 中的哪一个安装在 .NET 3.0 框架中。
想法?
我试过但没用
第一次尝试 - 如果缺少程序集,请添加它。我删除了旧的缺失引用。然后我将 DLL 从“ASP.NET MVC3\Assemblies”文件夹复制到我项目的一个文件夹中。将其设置为“始终复制”,并将其添加为引用。
这样,该项目将在 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>
再次尝试,得到相同的警告。
我的问题是 - 我还有问题吗?还是我会不顾警告解决它?
最佳答案
通过 NuGet 获取最新版本的 MVC3。在 Dev Studio 中打开您的项目。打开 Dev Studio 底部的包管理器控制台选项卡。然后使用这个命令:
PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
如果您单击“-Version”之后的 Tab 键,您将获得所有可用版本的列表。
如果您使用的是旧版本的 NuGet,您可能会收到一条错误消息,指示您必须对其进行升级。如果是这样,请打开工具->扩展管理器以安装最新版本的 NuGet。请注意,在安装 NuGet 之前,您需要以管理员身份运行 Dev Studio。
安装 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>
关于c# - 缺少 System.web.mvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535131/