我正在将我的项目从MVC4转换为MVC5(并将.NET4转换为.NET4.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,
区域性=中性,publickeytoken=31bf3856ad364e35'(在上下文中)
“默认”位置
'C:\Windows\Microsoft.NET\Assembly\GAC\u msil\system.web.webpages.razor\v4.0\u 1.0.0.0\uu 31bf3856ad364e35\system.web.webpages.razor.dll'。
B型源于'system.web.webpages.razor,版本=3.0.0.0,
区域性=中性,publickeytoken=31bf3856ad364e35'(在上下文中)
“默认”位置
'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET
files\studentportal3g\2204bad2\aece9b3b\assembly\dl3\ad80387c\91adbf51\u fc73d101\system.web.webpages.razor.dll'。
当我第一次看到这是虽然,啊容易!没那么多:)
我检查了每个项目,确保它的版本升级到MVC5,它有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”中的缓存文件夹
文件\学生门户3g…
旧的坏dll从哪里来?如何修复此错误?我如何防止它再次发生?
谢谢,
埃里克-
最佳答案
visual studio是一个很好的工具,但它在升级依赖项时并不总是做出正确的选择,也不支持msbuild中所有可能的选项。每当您发现自己处于这样的绑定中时,您应该手动查看并(如有必要)编辑.csproj
文件以解决它。
问题不是你的文件存在于GAC中,或者它没有被NuGET安装,问题很可能是你的一个项目文件仍然引用了旧版本的System.Web.WebPages.Razor
版本1.0.0.0
,你需要找到所有的引用,并将它们改为3.0.0.0
。
右键单击解决方案资源管理器中的项目节点,然后单击Unload Project
。
再次右键单击项目节点,然后单击Edit <projectName>.csproj
。
在文件中搜索对System.Web.WebPages.Razor
的引用,并相应地更新版本和HintPath
(如下所示)。请确保HintPath
实际使用指向现有文件的点。
对解决方案中的所有依赖项目(以及不属于解决方案一部分的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的更新版本。
您可能还想查看this question。