我真的不知道该怎么做,我正在关注this article,它展示了如何手动迁移我的MVC 3应用程序。
我按照所有步骤但在运行我的应用程序时出现以下错误:
>应用程序中的服务器错误。无法加载文件或程序集'System.Web.WebPages.Razor, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或 其中一个依赖项。定位程序集的清单定义 与装配参考不匹配。 (HRESULT的例外情况: 0x80131040)
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.IO.FileLoadException:无法加载文件或 assembly'System.Web.WebPages.Razor,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该 找到程序集的清单定义与程序集不匹配 参考。 (HRESULT异常:0x80131040)
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
装配加载跟踪:以下信息可能对您有所帮助 确定汇编'System.Web.WebPages.Razor的原因, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35' 无法加载。
警告:装配绑定日志记录已关闭。要启用程序集绑定 失败日志记录,设置注册表值 [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)为1.注意:有 与程序集绑定失败相关的一些性能损失 日志记录。要关闭此功能,请删除注册表值 [HKLM \ SOFTWARE \微软\融合!EnableLog]。
堆栈追踪:
[FileLoadException:无法加载文件或程序集 'System.Web.WebPages.Razor,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该 找到程序集的清单定义与程序集不匹配 参考。 (HRESULT异常:0x80131040)]
Microsoft.Web.Samples.PreApplicationStartCode.Start()+ 0[InvalidOperationException:预应用程序启动初始化 方法从类型Microsoft.Web.Samples.PreApplicationStartCode开始 抛出以下错误消息的异常:无法加载 文件或程序集'System.Web.WebPages.Razor,Version = 1.0.0.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040)。]
System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 方法)+423
System.Web.Compilation.BuildManager.CallPreStartInitMethods()+ 306 6 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager,IApplicationHost appHost,IConfigMapPathFactory configMapPathFactory,HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel,Exception appDomainCreationException)+677[HttpException(0x80004005):预应用程序启动初始化 方法从类型Microsoft.Web.Samples.PreApplicationStartCode开始 抛出以下错误消息的异常:无法加载 文件或程序集'System.Web.WebPages.Razor,Version = 1.0.0.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040)。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+9079340 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+97 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext context)+256版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.237
我查看了代码,但是我没有在1.0版本2.0中看到对System.Web.WebPages.Razor的引用。
答案 0 :(得分:36)
使用NuGet并添加Microsoft.AspNet.Mvc软件包(Microsoft Asp.Net Mvc 4)。这应该升级您的参考。参见:
您需要升级web.config中的程序集引用。
从根目录中删除web.config:
<assemblies>
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
添加到根web.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<强>查看/ Web.Config中:强>
将Razor从1.0.0.0更改为2.0.0.0:
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
答案 1 :(得分:2)
您是否忘记更新Views\Web.Config
中的引用?其中的引用用于构建视图页面。
答案 2 :(得分:2)
我假设您有MVC3 Intranet Web应用程序,当使用NuGet从MVC3升级到MVC4时,您的应用程序现在引用System.Web.WebPages.Razor版本2.0.0.0,而不是System.Web.WebPages.Razor版本1.0.0.0 。这是我解决参考的方法。
有两个地方需要解决:
在根web.config中,
<compilation debug="true" targetFramework="4.0">
<assemblies>
. . .
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
. . .
</assemblies>
</compilation>
将版本= 1 .0.0.0更改为版本= 2 .0.0.0
所以你的新参考文件将如下所示:
<compilation debug="true" targetFramework="4.0">
<assemblies>
. . .
<add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
. . .
</assemblies>
</compilation>
希望它有所帮助!
答案 3 :(得分:1)
您是否在整个解决方案中全局搜索 System.Web.WebPages.Razor,Version = 1.0.0.0 ?你还引用System.Web.WebPages.Razor
(版本1.0.0.0)吗?您是否参考System.Web.WebPages.Razor
版本2.0.0.0?
[更新] 我终于遇到了同样的问题。看起来我安装和卸载的NuGet包之一并没有完全删除它使用的System.Web.Razor
引用。清理解决方案没有帮助,因为Web应用程序没有直接使用DLL。我终于通过手动删除整个 bin 目录来实现它...
答案 4 :(得分:1)
如上所述重新安装AspNetSprite软件包并不能解决问题。但是在根web.config文件的runtime \ assemblyBinding部分添加这些行有效:
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
答案 5 :(得分:0)
检查views文件夹中的web.config。
更新:
这一点看起来很可疑。
Microsoft.Web.Samples.PreApplicationStartCode
您是否引用了任何示例应用程序库,例如MVC期货或类似的东西?
答案 6 :(得分:0)
我的应用程序使用了第三方软件包AspNetSprites-MvcAndRazorHelper。重新安装此软件包并更正了引用的错误。
答案 7 :(得分:0)
这是另一个可用于将mvc 3升级到mvc 4的Nuget包 https://nuget.org/packages/UpgradeMvc3ToMvc4
答案 8 :(得分:0)
这很简单,当您更新到MVC 4.0.0.0时,解决方案中的webconfig仍然指向MVC 3.0.0.0.0。 所以只需更换MVC 3.0.0.0.0版。由4.0.0.0.0
对其他程序集执行相同操作,检查程序集的版本,检查项目中引用中相应程序集的属性。