ASP.NET Core 1.1在本地运行良好,但在发布到Azure时说“启动应用程序时出错。”

时间:2017-01-28 22:25:49

标签: c# .net azure model-view-controller asp.net-core

我一直在开发一个ASP.NET Core Web应用程序,主要基于Visual Studio 2017 RC2中提供的MVC模板。它在本地调试模式下运行良好,但是当我尝试将其发布到Azure托管的Web应用程序时,我收到此错误:

enter image description here

  

启动应用程序时出错。

     

.NET Core X86 v4.1.1.0 | Microsoft.AspNetCore.Hosting版本   1.1.0-rtm-22752 | Microsoft Windows 6.2.9200

我尝试在web.config文件中设置stdoutLogEnabled="true",但似乎没有效果,错误是一样的。

更新

在一些帮助下,我设法检索了日志,并说:

Application startup exception: System.TypeLoadException: Could not load type 'System.IO.File' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.    
   at Microsoft.Extensions.DependencyModel.FileWrapper.OpenRead(String path)
   at Microsoft.Extensions.DependencyModel.DependencyContextLoader.LoadEntryAssemblyContext(IDependencyContextReader reader)
   at Microsoft.Extensions.DependencyModel.DependencyContextLoader.Load(Assembly assembly)    
   at Microsoft.Extensions.DependencyModel.DependencyContext.Load(Assembly assembly)    
   at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.DiscoverAssemblyParts(String entryPointAssemblyName)    
   at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services)    
   at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services)    
   at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(IServiceCollection services)    
   at Bla.Api.Startup.ConfigureServices(IServiceCollection services) in C:\Users\user\Source\Workspaces\Bla\Bla.Api\src\Bla.Api\Startup.cs:line 73
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()

Hosting environment: Production    
Content root path: D:\home\site\wwwroot    
Now listening on: http://localhost:1264    
Application started. Press Ctrl+C to shut down.

它在第73行引用的代码行是:

services.AddMvc();

更新

我的global.json文件看起来像这样(其中Bla.Api是项目的名称,文件位于解决方案根文件夹中)。

{
  "projects": [ "Bla.Api" ],
  "sdk": {
    "version": "1.1.0"
  }
}

10 个答案:

答案 0 :(得分:128)

由于许多不同的问题都可能导致此错误页面,因此我强烈建议您快速轻松地确定以下原因,而无需摔跤Azure(或任何服务器/平台)来获取日志。

您可以通过设置 .UseSetting("detailedErrors", "true") .CaptureStartupErrors(true) 操作,在启动时启用非常有用的开发人员友好错误消息在Program.cs文件中。

适用于ASP.NET Core 1.x

public static void Main(string[] args)
{
  var host = new WebHostBuilder()
      .UseKestrel()
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseSetting("detailedErrors", "true")
      .UseIISIntegration()
      .UseStartup<Startup>()
      .CaptureStartupErrors(true)
      .Build();

  host.Run();
}

(2018/07) ASP.NET Core 2.1更新

public class Program  
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .CaptureStartupErrors(true)
            .UseSetting("detailedErrors", "true")
            .UseStartup<Startup>()
            .Build();
}
  • 一旦完成故障排除,应立即删除这些设置,以免您的应用程序遭受恶意攻击。

答案 1 :(得分:8)

通过sftp客户端连接并手动删除site / wwwroot文件夹中的所有内容。重新发布

自从我将从Azure托管的应用程序迁移到MVC 4的.net核心之后,我什么都没有问题。

几周前,我在成功发布后无法获得项目。我甚至尝试过两次删除整个App Service配置文件并使用相同的名称重新创建它。但是,当我在App Service名称中附加一个'2'(以创建一个从未使用过的应用程序服务)时,发布完全相同的0项更改项目。如果我可以成功发布到新的应用服务而不是已删除并重新创建的应用服务,那么删除究竟做了什么?在每个发布中检查了“删除现有文件在目的地”,这些文件也没有做任何事情。

我今天遇到的错误与我在#2网站的OP中所显示的相同。它是在尝试更新一些asp nuget软件包并重新部署之后发生的。真的不想继续迭代我的app服务的myApp3,我决定使用azure概述页面中提供的FTP信息。我导航到Site / wwwroot并从FTP客户端删除了所有内容。然后我发布了应用程序,它工作正常。我只能得出结论,“删除”复选框无法正常工作。

答案 2 :(得分:6)

感谢大家的建议。最终唯一有用的就是删除我无法发布的Azure网络应用,并创建一个全新的网络应用。我想也许上一个运行时环境中的一些.dll仍在闲逛或没有更新......无论是什么,重新创建它都有效。希望我不会再次犯这个错误,因为你不能在生产中真正做到这一点。

对global.json文件进行更改似乎没有效果。

从模板创建一个全新的API也没有帮助,问题出在Azure Web App本身,因为一切都在本地运行良好。

另一个非常有用的提示是根据另一个答案添加日志记录(以及&#34;日志&#34;根目录中的文件)。这至少指出了我正确的方向。还可以使用dotnet --version检查运行时。

再次感谢大家的帮助!

答案 3 :(得分:5)

我遇到了同样的问题。只是没有部署在Azure,我使用我的本地计算机作为服务器并在IIS中托管它。

An error occurred while starting the application.

.NET Core X64 v4.1.1.0    |   Microsoft.AspNetCore.Hosting version 1.1.1    |    Microsoft Windows 10.0.14393    |   Need help?

通过更改web.config解决了这个问题。

首先设置stdoutLogEnabled = "true"

然后确保stdoutLogFile=".\logs\stdout" />此文件夹存在。

然后重新启动IIS,您可以在日志文件中找到真正的问题。

答案 4 :(得分:3)

删除来自wwwroot / your_application_folder的所有现有dll,然后复制所有发布输出文件和文件夹。

当NUGETS自行更新时会出现问题。如果你不清理wwwroot / your_application_folder下的现有文件IIS会给出上面的错误。

答案 5 :(得分:2)

Clean and rebuild fixed everything.

答案 6 :(得分:1)

问题可能重复 - 请参阅ASP.NET Core hosting - 500 internal server error


快速回答:

您需要设置:stdoutLogEnabled="true"stdoutLogFile=".\logs\stdout"。此外,您需要手动创建logs文件夹。

答案 7 :(得分:0)

就我而言,这是因为我试图发布用于Fabook OAuth的用户机密。我知道这是一个非常情境化的具体答案,但OAuth现在似乎很常见。事实证明,用户秘密并不打算发布。谁知道。

为了测试这个,我暂时在startup.cs中更改了以下代码。这些数据不应作为最佳实践的一部分进行硬编码,因为它最终会在源代码管理中以明文形式出现。

<强>之前

    app.UseFacebookAuthentication(new FacebookOptions()
    {
        AppId = Configuration["Authentication:Facebook:AppId"],
        AppSecret = Configuration["Authentication:Facebook:AppSecret"]
    });

<强>后

    app.UseFacebookAuthentication(new FacebookOptions()
    {
        AppId = "0000000000000", // your value
        AppSecret = "0000000000000000000000000000000" // your value
    });

然后它奏效了。

答案 8 :(得分:0)

在我的情况下,那是因为我试图在Startup中获取一些数据,并且dbcontext没有在生产环境中更新。

将我的ConnectionString更改为Production并运行Update-Database,问题解决了。

答案 9 :(得分:0)

在我的情况下,应用程序目录中缺少一个名为Resources的目录。