小编典典

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

c#

我正在将项目从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’在上下文’Default’中的位置’C:\ windows \
Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \
v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll’。

类型B源自位置’C:\ Windows \ Microsoft.NET \ Framework \
v4.0.30319的上下文’默认’中的’System.Web.WebPages.Razor,Version = 3.0.0.0,Culture =
neutral,PublicKeyToken = 31bf3856ad364e35’ \临时ASP.NET文件\ studentportal3g \
2204bad2 \ aece9b3b \ assembly \ dl3 \ ad80387c \ 91adbf51_fc73d101 \
System.Web.WebPages.Razor.dll’。

当我第一次看到这是,啊,容易!没那么多 :)

我遍历了每个项目,并确保将其版本升级到MVC 5,该版本具有System.Web.WebPages.Razor.dll的3.0.0.0版本。

清理重建,仍然得到错误。没问题,我将删除缓存的临时文件。

干净的重建,仍然可以解决问题。我回过头来,在具有引用的每个项目的引用中,手动检查System.Web.WebPages.Razor.dll的每个版本。我检查我将dll复制到的文件夹,以手动对其进行引用,但该文件夹不存在。

如果我的解决方案不包含DLL的副本或对该DLL的引用,并且我已经手动删除了C:\ Windows \ Microsoft.NET \ Framework \
v4.0.30319 \ Temporary ASP.NET中的缓存文件夹

Files \ studentportal3g …

旧的坏dll是从哪里来的?如何解决此错误?如何防止再次发生?

谢谢,

埃里克


阅读 294

收藏
2020-05-19

共1个答案

小编典典

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

问题不在于您的文件是否存在于GAC中,或者不是由NuGet安装的,不是因为您的项目文件之一仍然引用了version的旧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的更新版本。

您可能还想看看这个问题

2020-05-19