簡體   English   中英

ASP.NET Core 1.1 在本地運行良好,但在發布到 Azure 時顯示“啟動應用程序時出錯”。

[英]ASP.NET Core 1.1 runs fine locally but when publishing to Azure says “An error occurred while starting the application.”

我一直在開發 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 | 微軟視窗 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"
  }
}

由於許多不同的問題都可能導致此錯誤頁面,因此我強烈推薦以下方法,以便快速輕松地確定根本原因,而無需費力使用 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();
}
  • 完成故障排除后應立即刪除這些設置,以免您的應用程序受到惡意攻擊。

通過 sftp 客戶端連接並手動刪除 site/wwwroot 文件夾中的所有內容。 重新發布

自從我將托管在 Azure 上的應用程序從 MVC 4 遷移到 .net 核心后,我遇到了一些問題。

幾周前的某個時候,我無法在成功發布后運行項目。 我什至嘗試了兩次刪除整個應用服務配置文件並使用相同的名稱重新創建它。 但是,當我將“2”附加到應用服務名稱(以創建一個從未使用過的應用服務)時,發布具有 0 個更改的完全相同的項目工作得很好。 如果我可以成功發布到新的應用程序服務,但不能發布到已刪除並重新創建的應用程序服務,那么刪除究竟會做什么? 在每次發布中都檢查了在目標位置刪除現有文件,這也沒有做任何事情。

我今天遇到了與我的 #2 站點的 OP 中的圖片相同的錯誤。 它發生在嘗試更新多個 asp nuget 包並重新部署之后。 真的不想繼續迭代我的應用程序服務的 myApp3,我決定使用 azure 概述頁面中提供的 FTP 信息。 我導航到 Site/wwwroot 並從 FTP 客戶端中刪除了里面的所有內容。 然后我發布了該應用程序,它奏效了。 我只能得出結論,“刪除”復選框不能正常工作。

謝謝大家的建議。 最后唯一有效的方法是刪除我無法發布到的 Azure Web 應用程序,並創建一個全新的應用程序。 我想也許之前運行時環境中的一些 .dll 仍然存在或沒有更新......不管是什么,重新創建它都有效。 但希望我不會再次收到此錯誤,因為您無法在生產中真正執行此類操作。

對 global.json 文件進行更改似乎沒有任何效果。

從模板創建全新的 API 也無濟於事,問題出在 Azure Web 應用程序本身,因為一切都在本地運行良好。

另一個非常有用的提示是根據其他答案添加日志記錄(以及根目錄中的“日志”文件)。 這至少為我指明了正確的方向。 還使用dotnet --version檢查您的運行時。

再次感謝大家的幫助!

我有同樣的問題。 只是沒有部署在 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,您可以在日志文件中找到真正的問題。

從 wwwroot/your_application_folder刪除所有現有的 dll,然后復制所有發布的輸出文件和文件夾。

當 NUGETS 自行更新時會出現問題。 如果您不清理 wwwroot/your_application_folder 下的現有文件,IIS 會出現上述錯誤。

清理和重建修復了一切。

問題可能重復 - 請參閱ASP.NET Core 托管 - 500 內部服務器錯誤


快速回答:

您需要設置: stdoutLogEnabled="true"stdoutLogFile=".\\logs\\stdout" 此外,您需要手動創建logs文件夾。

就我而言,這是因為我試圖發布用於 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
    });

然后它起作用了。

就我而言,那是因為我試圖在 Startup 中獲取一些數據,而 dbcontext 未在生產環境中更新。

將我的 ConnectionString 更改為 Production 並運行 Update-Database,問題解決了。

就我而言,app 目錄中缺少一個名為 Resources 的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM