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

Eri*_*Cal 4 c# asp.net-mvc razor asp.net-mvc-4 asp.net-mvc-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-

Nig*_*888 5

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>
Run Code Online (Sandbox Code Playgroud)

更新参考

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

您可能还想查看此问题.