c# - ASP.NET 5 (vNext) 在 Azure 上导致 500 - 内部服务器错误

标签 c# asp.net azure

我们正在开发一个使用新的 ASP.NET 5 (vNext)、EF7 和 AngularJS 的项目,并计划在 Azure 上部署 WebApp。

我在 Azure 上创建了一个新的 Web 应用程序,并通过 Visual Studio 2015 发布了我们的项目。 发布后,当我尝试测试我们的应用程序时,我会收到 500 - 内部服务器错误。

我已经设置了<customErrors mode="Off" />web.configwwwroot没有成功。 然后我通过 FTP 登录,“DetailedErrors”也不包含任何有用的信息。

eventlog.xml 包含以下异常:

<Events><Event><System><Provider Name="ASP.NET 4.0.30319.0"/>    <EventID>1309</EventID><Level>2</Level><Task>0</Task>    <Keywords>Keywords</Keywords><TimeCreated SystemTime="2015-07-28T10:54:43Z"/>    <EventRecordID>280293125</EventRecordID><Channel>Application</Channel>    <Computer>RD000D3A202052</Computer><Security/></System><EventData>    <Data>3005</Data><Data>An unhandled exception has occurred.</Data>    <Data>7/28/2015 10:54:43 AM</Data><Data>7/28/2015 10:54:43 AM</Data>    <Data>9df086471c304ebfa4ddddf9ca2a2b92</Data><Data>1</Data><Data>1</Data><Data>0</Data><Data>/LM/W3SVC/2082809257/ROOT-1-130825544829782705</Data><Data></Data><Data>/</Data><Data>D:\home\site\wwwroot\</Data><Data>RD000D3A202052</Data><Data></Data><Data>2108</Data><Data>w3wp.exe</Data><Data>IIS APPPOOL\appname</Data><Data>InvalidOperationException</Data><Data>Couldn't determine an appropriate version of runtime to run. See http://go.microsoft.com/fwlink/?LinkId=517742 for more information.
at AspNet.Loader.RuntimeLocator.LocateRuntime(MapPathHelper mapPathHelper, Boolean&amp; isCoreClr, String&amp; relativeAppBasePath)
at AspNet.Loader.Bootstrapper.LoadApplication(String appId, String appConfigPath, IProcessHostSupportFunctions supportFunctions, LoadApplicationData* pLoadAppData, Int32 loadAppDataSize)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)
at System.Web.Hosting.ProcessHost.System.Web.Hosting.IProcessHostLite.ReportCustomLoaderError(String appId, Int32 hr, AppDomain newlyCreatedAppDomain)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)   at System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags, PolicyLevel policyLevel, Exception appDomainCreationException)

它表示无法确定适当的运行时版本。

在项目属性中,解决方案 DNX SDK 版本设置为:

  • 1.0.0-beta4
  • .NET 框架
  • x86

project.json中设置的框架:

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
},

如何获取有关错误的更多信息?

最佳答案

我能够重现您的问题。事实证明,发布向导默认选择的运行时与应用程序所选的 DNX 运行时不匹配。您可以通过进入发布设置并在下拉列表中选择正确的目标 DNX 版本来解决此问题。对于您的情况:beta4 core-clr 版本。

文件 > 新项目之后 - 我的 project.json 看起来像:

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
},  

注意 - 它使用的是 core - core clr - 而不是完整的 CLR。在设置此应用程序的发布时 - 它跳过了此处的默认设置:

publish wizard selects NON core clr by default

注意 - 默认情况下它选择 dnx-clr,而不是 core-clr。不过 Beta5 版本是正确的。

发布导致内部服务器错误:

Good old yellow and red ASPNET error message

我在这里找到了错误描述:

Error description

注意:这需要安装新的 Azure 2.7 SDK。

此消息有趣的部分是:

<Data>DirectoryNotFoundException</Data>
<Data>Unable to find the runtime directory 'D:\home\site\wwwroot\..\approot\runtimes\dnx-clr-win-x86.1.0.0-beta5-12103'. 
Possible causes:
1. The runtime was not packaged with the application.
2. The packaged runtime architecture is different from the application pool architecture. 
... </Data>

所以我切换到正确的 Target DNX 版本并且它起作用了:

enter image description here

注意 - coreclr 版本。

关于c# - ASP.NET 5 (vNext) 在 Azure 上导致 500 - 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31695057/

相关文章:

c# - HashSet列表到单个HashSet的高效转换

c# - 小巧玲珑。 conn.Execute 抛出什么异常?

c# - TextMode=数字无效

Azure Active Directory - 自定义策略错误

c# - 如何使用 MSI 从 Azure 中的 VMSS 访问服务总线

注册源选项中缺少 Azure Purview 源(SAP、HIVE、S3、 "Multiple Sources")

c# - DataGridViewColumn 的进度条

javascript - Web 方法仅在标记为静态时才有效,否则无效

asp.net - 无需编译DLL即可部署asp.net应用程序

c# - 从 asp.net mvc 站点中的外部站点获取帖子响应