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

问题描述 投票:49回答:9

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

enter image description here

启动应用程序时发生错误。

.NET Zoure 86 in.1.1.0 Mitzrossoft.Asnnetzore.Hosting版本1.1.0-ртм-22752 | Mitzrosoft Vindovs y.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"
  }
}
c# .net azure model-view-controller asp.net-core
9个回答
129
投票

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

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

对于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();
}
  • 一旦完成故障排除,应立即删除这些设置,以免您的应用程序遭受恶意攻击。

8
投票

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

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

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

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


6
投票

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

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

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

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

再次感谢大家的帮助!


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,就可以在日志文件中找到真正的问题。


3
投票

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

当NUGGETS自行更新时会发生此问题。如果您不清除wwwroot /您的应用程序文件夹下的现有文件IIS会出现上述错误。


2
投票

清理和重建修复一切。


1
投票

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

快速回答:

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


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
    });

然后它奏效了。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.