3

在将 mvc nuget 包从版本 5.1.0 升级到 5.2.2 后,我们在 Azure 上的机器 (webrole) 拒绝启动 Web 角色。它处于回收状态。我在事件日志中发现错误:

    The description for Event ID 1007 from source Windows Azure Runtime 2.4.0.0 cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event: 

820
WaIISHost
Role entrypoint could not be created: System.TypeLoadException: Unable to load the role entry point due to the following exceptions:
-- System.IO.FileLoadException: Could not load file or assembly 'System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

 ---> System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
   at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.RuntimeModule.GetTypes()
   at System.Reflection.Assembly.GetTypes()
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(Assembly entryPointAssembly)
   --- End of inner exception stack trace ---
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(Assembly entryPointAssembly)
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CreateRoleEntryPoint(RoleType roleTypeEnum)
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum) 
the message resource is present but the message is not found in the string/message table

我试图通过互联网搜索,但没有有用的答案。除了降级,我无法解决它。幸运的是,软件包版本 5.1.1 正在运行。

更新 1: 经过反复试验,我发现 asp.net mvc 包在 5.1.3 版之前都可以。看起来不支持 5.2.0 以上的包。

更新 2: 我们决定拆分我们的 web 和 web.api,所以我不再有这个问题了。我最好的猜测是,确实有 nuget,它引用了旧的 asp.net mvc 包。

4

7 回答 7

4

我有一个类似的问题。我们继承了一个项目,并将 ASPNET MVC 版本更新为 5.2.2.0。我们无法部署到 Azure。我们能找到的唯一错误是您在此处提到的错误。

我们更正了每个 web.config 文件,因此旧版本被重定向到新版本,但我们仍然遇到同样的问题。

然后我们编写了一个小测试方法来迭代每个程序集,我们看到一个 NuGet 包仍在使用 Asp.net MVC 4.0。这个包是一个旧版本,有一段时间没有更新了。我下载了源代码,更新了 Mvc Nuget 并手动插入了 dll。

我们再次部署,一切都完美无缺。

这是测试方法。

 private void TestAssemblies()
    {
        var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
        foreach (Assembly item in allAssemblies)
        {
            PrintAssembly(item);
        }
    }
    private void PrintAssembly(Assembly assembly)
    {
        foreach (var item in assembly.GetReferencedAssemblies())
        {
            if (item.FullName.Contains("System.Web.Mvc"))
            {

                Debug.WriteLine(item);
                Debug.WriteLine("Parent: " + assembly.FullName);
                Debug.WriteLine("------------------------------------------------------------");
            }
        }
    }
于 2015-01-21T11:21:42.117 回答
2

MVC 5.2.2 在 Azure 中运行良好。您的角色回收很可能表明您没有正确部署您的应用程序,或者您对绑定重定向可能无法处理的旧版本 MVC 有隐藏的依赖关系。

我强烈建议您阅读 Kevin Williamson关于 Azure 部署故障排除系列的所有条目。

有很多事情可能会出错,所以不要尝试创建一个通用的一刀切列表,而是查看博客文章,如果您无法弄清楚具体发生了什么,请发表评论。

鉴于您发布的错误,假设您具有@Yishai Galatzer 提到的正确绑定重定向,您的部署中可能有一个对 MVC 5.1.0.0 具有隐藏依赖关系的 DLL。我建议使用像Jetbrains DotPeek这样的程序来检查包中的所有 DLL 并查看它们的引用。我怀疑你会找到一个本身依赖于 5.1.0.0 的。

于 2014-10-23T16:04:14.990 回答
2
I have also face similar problem with mvc5.2.2 azure deployment..

最终的解决方案是我们需要添加这个 web.config

<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
</dependentAssembly>``
于 2015-02-18T12:04:51.950 回答
1

从外观上看,您的 web.config 中似乎缺少到 MVC 5.2.2 的绑定重定向。这应该只是工作。

我们正在努力验证这种情况。但是,让我们知道这是否适合您。请在您的 web.config 中查看以下部分,并确保它与以下 xml 匹配:

<dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" /> </dependentAssembly>

于 2014-10-22T23:02:23.113 回答
0

几天前我遇到了完全相同的问题。请参考这篇文章。您需要向WaIISHost.exe.config<dependentAssembly>添加部分,该部分通常在您的 VM 上为 @ 'E:\base\x64' 。

于 2014-10-25T09:02:12.007 回答
0

很多时候我发现问题出在 ~\Views\Web.config 文件中。它保留对旧 MVC 版本的引用。只需手动更新它。

如果这不起作用,请在 Sublime Text 或 VS 之外的其他工具中对您的解决方案进行全文搜索,然后搜索导致您出现问题的版本字符串。

于 2015-08-20T14:36:42.843 回答
0

我遇到了同样的问题,它在我的开发机器上运行良好,但是在部署时我遇到了组装错误。为了解决这个问题,我不得不将“oldVersion”从版本 0.0.0.0 更改为版本 1.0.0.0

<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
</dependentAssembly>

<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
</dependentAssembly>
于 2016-03-10T11:06:37.840 回答