【发布时间】:2014-12-19 12:52:56
【问题描述】:
我们有一个旧的 ASP.NET MVC 3 Web 应用程序,在 VS2010 中构建,自上周的安全更新以来无法编译。
问题在于对 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 包更新到最新版本(当然在可能的情况下)?
-
不知道你是不是遇到the MS14-059 update bug...
-
网络应用没有任何 nuget 包。是的,这是 MS14-059 错误。
-
我遇到了同样的问题,尽管我使用的是 nuget 包和版本 4。它编译得很好,而且一切正常,但是我想摆脱这 20 多个编译警告。
标签: c# asp.net .net asp.net-mvc