我正在将项目从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’。
无法将[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是从哪里来的?如何解决此错误?如何防止再次发生?
谢谢,
埃里克
Visual Studio是一个很棒的工具,但是在升级依赖项时,它并不总是做出正确的选择,也不支持MSBuild中可用的所有可能选项。每当发现自己处于这种绑定中时,都应该手动检查和(如有必要)编辑.csproj文件以解决该问题。
.csproj
问题不在于您的文件是否存在于GAC中,或者不是由NuGet安装的,不是因为您的项目文件之一仍然引用了version的旧System.Web.WebPages.Razor版本1.0.0.0,而是您需要查找所有文件。引用它,并3.0.0.0相应地将其更改为。
System.Web.WebPages.Razor
1.0.0.0
3.0.0.0
Unload Project
Edit <projectName>.csproj
HintPath
<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文件,以确保它们没有引用该程序集的任何旧版本。
web.config
/Views/web.config
注意: 如果上述说明不能解决您的问题,则可能是您的解决方案之外的问题。最有可能存在一个第三方库,该库在某处引用了文件的旧版本。如果是这样,您可以尝试获取DLL的更新版本。
您可能还想看看这个问题。