自从上周的安全更新以来,我们有一个旧的ASP.NET MVC 3 Web应用程序在VS2010中构建,但无法编译。
问题是对System.Web.Mvc.dll的引用已损坏。
当我在未运行安全更新的构建计算机上打开解决方案文件时,打开“引用”->“ 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”的属性时,看到的版本是3.0.0.0。
当我查看开发机上的属性时,会看到版本3.0.50813.1。
我需要的是一种更改生成和运行方式的方法,以便无论.NET 3.0框架中安装了这两个DLL中的哪个,都可以生成和运行。
有想法吗?
我尝试过的没有用
第一次尝试-如果缺少程序集,请添加它。我删除了旧的丢失的参考。然后,将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>
再次尝试,并得到相同的警告。
我的问题是-我还有问题吗?还是尽管有警告,我还是会解决吗?