C# 将ASP.NET MVC从4升级到5时出现奇怪的错误
我正在将我的项目从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,版本=1.0.0.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35'在上下文中 位置处的“默认值” 'C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_1.0.0_uuu31BF3856AD364E35\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,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”中的缓存文件夹 文件\studentportal3g 旧的坏dll是从哪里来的?如何修复此错误?我如何防止它再次发生 谢谢C# 将ASP.NET MVC从4升级到5时出现奇怪的错误,c#,asp.net-mvc,asp.net-mvc-4,razor,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,Asp.net Mvc 5,我正在将我的项目从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,版本=1.0.0.0, 区域性
Eric-看起来旧DLL位于全局程序集缓存(GAC)中。GAC是一个可以存储可从计算机上的多个应用程序引用的程序集的地方。阅读更多有关GAC的信息 使用工具
gacutil
更新GAC中的部件
该工具位于程序文件中“Microsoft SDK”文件夹下的某个位置。对我来说,它位于
C:\Program Files(x86)\Microsoft SDK\Windows\v10.0A\bin\NETFX 4.6.1工具\
打开cmd
并导航到gacutil i存储的位置。然后像这样使用它:
gacutil.exe-i[组装路径]-f
-i
参数用于指示部件的位置。如果程序集已经存在,-f
参数用于强制更新程序集
例子
假设您的DLL位于
C:\temp\System.Web.WebPages.Razor.dll
然后运行
gacutil.exe-i“C:\temp\System.Web.WebPages.Razor.dll”-f
Visual Studio是一个很好的工具,但在升级依赖项时,它并不总是做出正确的选择,也不支持MSBuild中所有可能的选项。每当您发现自己陷入这样的困境时,您应该手动查看并(如有必要)编辑.csproj
文件以解决它
问题不在于您的文件存在于GAC中,也不在于NuGet尚未安装,问题很可能在于您的一个项目文件仍然引用了旧版本的System.Web.WebPages.Razor
version1.0.0
,您需要找到对它的所有引用,并相应地将它们更改为3.0.0.0
Edit.csproj
System.Web.WebPages.Razor的引用,并相应地更新版本和HintPath
(如下所示)。确保使用的HintPath
实际指向现有文件
真的
..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.Razor.dll
更新参考
真的
..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Razor.dll
您还应该查看web.config
和/Views/web.config
文件,以确保它们没有引用此程序集的任何旧版本
注意:如果上述说明无法解决您的问题,则问题可能超出您的解决方案范围。很可能有第三方库在某处引用文件的旧版本。如果是这样,您可以尝试获取DLL的更新版本
您可能还想签出。看起来DLL存储在中。将GAC中的程序集更新为新的程序集。它不是CsProjs,但在过去某个时候有一些很小的web.cofig显然是由一个工具添加的,它们引用了1.0.0.0,将它们全部更新为3,现在可以工作了。谢谢谢谢,虽然看起来你的问题在别处。很高兴你把它修好了:-)
<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>