我正在尝试将项目从MVC 4 / EF 5升级到MVC 5 / EF 6.我将框架从4.5更新到4.5.1然后从NuGet更新了解决方案MVC(4.0.30506.0到5.1.1) )和EntityFramework(5到6.1.1)。这引起了Razor依赖(2.0.30506.0到3.1.1)和WebPages(2.0.30506.0到3.1.1)。我编辑了Project and Views文件夹web.config以反映更改并从csproj中删除了GUID。
当我在调试中运行该站点时,加载Views文件夹web.config时出错 - section name =“host”type =“System.Web.WebPages.Razor.Configuration.HostSection - line。
“为其创建配置节处理程序时出错 system.web.webPages.razor / host:无法加载文件或程序集 'System.Web.WebPages.Razor,Version = 3.1.1“
它在前一行(System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup)或根web.config中的Razor引用没有问题。不幸的是,堆栈跟踪无法识别调用程序集。
调用程序集:(未知)。
所有相关文件都包含在下面。
有谁知道问题是什么,更重要的是如何修复它。我只更新了最基本的NuGet包:MVC和实体框架。
packages.config:
…
<package id="EntityFramework" version="6.1.0" targetFramework="net451" />
<package id="jQuery" version="2.0.2" targetFramework="net45" />
<package id="jQuery.UI.Combined" version="1.10.3" targetFramework="net45" />
<package id="jQuery.Validation" version="1.11.1" targetFramework="net45" />
<package id="knockoutjs" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="5.1.1" targetFramework="net451" />
<package id="Microsoft.AspNet.Mvc.FixedDisplayModes" version="5.0.0" targetFramework="net451" />
<package id="Microsoft.AspNet.Razor" version="3.1.1" targetFramework="net451" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net45" />
…
<package id="Microsoft.AspNet.WebPages" version="3.1.1" targetFramework="net451" />
<!-- oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" -->
…
web.config: root
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
…
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.1.1" newVersion="3.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.1.1" newVersion="5.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.1" newVersion="3.1.1" /> </dependentAssembly>
web.config: Views folder
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup>
…
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
…
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
ERROR PAGE:
配置错误 描述:处理为此请求提供服务所需的配置文件时发生错误。请查看下面的具体错误详细信息并相应地修改配置文件。
分析器错误消息:为system.web.webPages.razor / host创建配置节处理程序时出错:无法加载文件或程序集'System.Web.WebPages.Razor,Version = 3.1.1,Culture = neutral ,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
来源错误:
Line 4: <configSections>
Line 5: <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
Line 6: <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
Line 7: <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.1.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
Line 8: </sectionGroup>
源文件:C:\ Project \ views \ web.config行:6
程序集加载跟踪:以下信息有助于确定无法加载程序集“System.Web.WebPages.Razor,Version = 3.1.1,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”的原因。
===预绑定状态信息=== 日志:DisplayName = System.Web.WebPages.Razor,Version = 3.1.1,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 (部分) 警告:为程序集提供了部分绑定信息: 警告:程序集名称:System.Web.WebPages.Razor,Version = 3.1.1,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 |域名ID:4 警告:仅提供部分程序集显示名称时发生部分绑定。 警告:这可能导致装订器装入错误的装配。 警告:建议为程序集提供完全指定的文本标识, 警告:它由简单的名称,版本,文化和公钥令牌组成。 警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270。 日志:Appbase = file:/// C:\ Project / 日志:初始PrivatePath = C:\ Project \ bin
日志:此绑定在默认加载上下文中启动。 日志:使用应用程序配置文件:C:\ Project \ web.config 日志:使用主机配置文件:C:\ Users \ xxx \ Documents \ IISExpress \ config \ aspnet.config 日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。 日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定)。 日志:尝试下载新的URL文件:/// C:/ Users / xxx / AppData / Local / Temp / Temporary ASP.NET Files / root / 898b17f9 / 848c1fdf / System.Web.WebPages.Razor.DLL。 日志:尝试下载新的URL文件:/// C:/ Users / xxx / AppData / Local / Temp / Temporary ASP.NET Files / root / 898b17f9 / 848c1fdf / System.Web.WebPages.Razor / System.Web.WebPages .Razor.DLL。 日志:尝试下载新的URL文件:/// C:\ Project /bin/System.Web.WebPages.Razor.DLL。 警告:比较程序集名称导致不匹配:次要版本 错误:无法完成程序集的设置(hr = 0x80131040)。探测终止。
版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.18446
答案 0 :(得分:5)
决定尝试弄清楚这些噩梦般的依赖是不值得的。我恢复了项目的备份,并从包管理器控制台(PMC)手动更新了MVC和EntityFramework,而旧版本没有调用Razor 3.1.1依赖项。
安装包Microsoft.AspNet.Mvc -Version 5.0.0
Install-Package entityframework -Version 6.0.0
注意:如果您使用DbContext.EntityState方法,它已从System.Data移至System.Data.Entity,请根据需要更新您的使用。
如果您有简单会员资格,则需要安装Microsoft.AspNet.WebPages.WebData(请参阅Is ASP.NET MVC 5 incompatible with the WebMatrix SimpleMembershipProvider?),如果项目中有OAuth(MVC4模板将OAuth安装到项目中,我不是使用它,所以我能够删除它。如果你正在使用它,你有更多的工作为你削减)你将不得不卸载OAUTH(WebData与OAUTH有依赖性问题)。
从NuGet卸载Microsoft WebPages OAuth库
从PMC安装包Microsoft.AspNet.WebPages.WebData
请务必根据您的项目执行以下步骤:升级MVC 4到5 http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2
- 或 -
如果您想尝试更新所有包,请按以下步骤操作:
从NuGet卸载Microsoft WebPages OAuth库(如果使用SimpleMembership,请参见上文)
必须单独更新:&#39; Microsoft ASP.NET Web API客户端库和核心库&#39;和 &#39; System.Spatial for OData&#39;
全部更新
从PMC安装包Microsoft.AspNet.WebPages.WebData(SimpleMembership,见上文)
(参见上面的DbContext.EntityState)
(web.config-root,add key =&#34; webpages:Version&#34; value =&#34; 3.0.0.0&#34 ;;请参阅上面的升级MVC 4到5; 其他更改自动进行)
(视图web.config需要手动更改)
(然后能够成功构建和打开项目,但是当它访问数据库时,它需要更新。 (来自PMC Update-Database。它在“CREATE INDEX [xxxxxxx] ON上失败了 [dbo] .xxxxxxxx“”System.Data.SqlClient.SqlException(0x80131904):操作失败,因为名称为&#39; xxxxxxxx&#39;的索引或统计信息已经存在于表格&#39; dbo.xxxxxxx&#39;。“)但我能够成功访问数据库)
答案 1 :(得分:1)
我能够通过更新views文件夹的web.config中的configSection以使其与packages.config中的内容相匹配来解决此问题。在我的实例中,我需要将Razor的版本调整为3.2.7版本。
-WEB.CONFIG
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
-PACKAGES.CONFIG
<package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net45" />
答案 2 :(得分:0)
当我将项目从Windows 7复制到Windows 8计算机时,System.Web.Mvc遇到了类似的问题,并且做了更新包,通过删除对System.Web.Mvc的引用并将其添加回来解决了这个问题浏览到我发现的5.2版本:
C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.2.0 \ lib \ net45
它也在: C :(我的解决方案文件夹)\ packages \ Microsoft.AspNet.Mvc.5.2.3 \ lib \ net45
点击详细信息:
通过转到Visual Studio 2013 Express中的Solution Explorer窗口,然后参考,右键单击System.Web.Mvc并删除来解决此问题。然后我通过右键单击References和“Add Reference ...”添加了引用,但是,我没有添加它选择Assemblies的常规方法,我点击浏览并找到了5.2版本
答案 3 :(得分:0)
几天前我遇到过类似的问题,最后我得到了解决方案,我只是从包管理器控制台运行命令update-package,它对我有用。
答案 4 :(得分:0)
如果您使用的是VS2017或更高版本,请从NuGet更新所有创建问题的引用。现在创建一个测试项目(使用MVC模板),并从NuGet更新所有解决方案引用。现在,从这个新创建的项目中获取web.config的这些部分(仅解决那些引起问题的部分)(解决方案根目录和Views),并替换原始项目的web.config中的类似部分。对于我来说,我的解决方法与此类似。
[N.B。”。在此过程中,我遇到了一些其他问题,我解决了从NuGet卸载和重新安装一些引用,以及独立构建单个项目的问题。]