为了账号安全,请及时绑定邮箱和手机立即绑定

将ASP.NET MVC从4升级到5的奇怪错误

将ASP.NET MVC从4升级到5的奇怪错误

繁星coding 2019-08-23 10:18:23
将ASP.NET MVC从4升级到5的奇怪错误我正在将我的项目从MVC 4转换为MVC 5(和.Net 4转换为.Net 4.5.2,这是变化的真正驱动因素。)当我运行我的一个页面时,我收到此错误(我添加了空白区域以便于阅读)[A] System.Web.WebPages.Razor.Configuration.HostSection无法强制转换为[B] System.Web.WebPages.Razor.Configuration.HostSection。类型A源自'System.Web.WebPages.Razor,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35',位于'默认'位置'C:\ windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll”。类型B源自'System.Web.WebPages.Razor,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35',位于'默认'位置'C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ studentportal3g \ 2204bad2 \ aece9b3b \ assembly \ dl3 \ ad80387c \ 91adbf51_fc73d101 \ System.Web.WebPages.Razor.dll'。当我第一次看到这个时,阿易!没那么多 :)我已经浏览了每个项目,并确保它的版本升级到MVC 5,其中包含3.0.0.0版本的System.Web.WebPages.Razor.dll。清理重建,仍然得到错误。没问题,我会删除缓存的临时文件。清理重建,仍然遇到问题。我回过头来,在每个引用它的项目的引用中手动检查每个版本的System.Web.WebPages.Razor.dll。我检查我的文件夹,我复制dll手动引用它们,它不存在。如果我的解决方案不包含DLL的副本或DLL的引用,我手动删除了'C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET中的缓存文件夹文件\ studentportal3g ...旧的坏dll来自哪里?我该如何解决这个错误?我该如何防止它再次发生?谢谢,Eric-
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

Visual Studio是一个很棒的工具,但它在升级依赖项时并不总是做出正确的选择,也不支持MSBuild中可用的所有可能选项。每当你发现自己处于这样的绑定时,你应该手动检查并(如有必要)编辑你的.csproj文件以解决它。

问题不在于您的文件存在于GAC中或NuGet尚未安装,问题很可能是您的某个项目文件仍然引用了旧版本的System.Web.WebPages.Razor版本1.0.0.0,并且您需要找到所有文件引用它并相应地更改它们3.0.0.0

  1. 在解决方案资源管理器中右键单击项目节点,然后单击Unload Project

  2. 再次右键单击项目节点,然后单击Edit <projectName>.csproj

  3. 在文件中搜索引用System.Web.WebPages.Razor并更新版本和HintPath相应的(如下所示)。确保HintPath您使用实际指向现有文件。

  4. 对解决方案中的所有相关项目(以及不属于解决方案的DLL中的任何项目)重复这些步骤。

旧参考

<Reference Include="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <Private>True</Private>        
    <HintPath>..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.Razor.dll</HintPath></Reference>

更新参考

<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Razor.dll</HintPath></Reference>

您还应该检查web.config/Views/web.config文件,以确保它们不引用此程序集的任何旧版本。

注意:如果上述说明无法解决您的问题,则问题可能不在您的解决方案范围内。很可能是第三方库在某处引用了旧版本的文件。如果是这样,您可以尝试获取DLL的更新版本。


查看完整回答
反对 回复 2019-08-23
?
炎炎设计

TA贡献1808条经验 获得超4个赞

看起来旧DLL在全局程序集缓存(GAC)中。GAC是一个可以存储可以从机器上的多个应用程序引用的程序集的地方。单击此处以了解有关GAC的更多信息。

使用该工具gacutil更新GAC中的程序集。

该工具位于Program Files中“Microsoft SDKs”文件夹下的某个位置。对我来说,它位于

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.1工具\

打开cmd并导航到我存储gacutil的地方。然后像这样使用它:

gacutil.exe -i [path to your assebly] -f

-i参数用于指示装配的位置。该-f参数用于强制更新程序集(如果已经存在)。

假设您的DLL位于

C:\ TEMP \ System.Web.WebPages.Razor.dll

然后你会跑 gacutil.exe -i "C:\temp\System.Web.WebPages.Razor.dll" -f


查看完整回答
反对 回复 2019-08-23
  • 2 回答
  • 0 关注
  • 474 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信