首页 文章

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

提问于
浏览
49

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

在此输入图像描述

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

.NET Core X86 v4.1.1.0 | Microsoft.AspNetCore.Hosting 版 1.1.0-rtm-22752 |微软 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"
  }
}

9 回答

  • 1

    问题可能重复 - 请参阅ASP.NET 核心托管 - 500 内部服务器错误

    快速回答:

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

  • 129

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

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

    对于 ASP.NET 核心 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 核心 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 客户端连接并手动删除 site/wwwroot 文件夹中的所有内容.重新发布

    我之前只有问题,因为我将我在 Azure 上托管的应用程序迁移到 MVC 4 的.net 核心。

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

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

  • 6

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

    对 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,然后复制所有发布输出文件和文件夹。

    当 NUGETS 自行更新时会发生此问题。如果不清除 wwwroot/your_application_folder 下的现有文件,则 IIS 会出现上述错误。

  • 2

    清理和重建修复一切。

  • 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,问题解决了。

相关问题