簡體   English   中英

將ASP.NET 5(ASP.NET Core)應用程序部署到Azure的問題

[英]Problems with deploy ASP.NET 5 (ASP.NET Core) app to Azure

我在ASP.NET 5(CoreCLR)上有一個應用程序,我嘗試將其發布到Microsoft Azure。 我使用免費的Web App (不是VDS)

我正在使用Visual Studio 2015 Publish->Microsoft Azure發布應用程序並遵循此說明

但是當我發布它並嘗試打開時,我看到只是不間斷加載空頁面。 我啟用日志記錄並從Azure查看日志(stdout.log),並且只有:

'"dnx.exe"' is not recognized as an internal or external command,

可操作程序或批處理文件。

我還嘗試用git進行Continiusly publishing 在推送期間,它開始恢復軟件包並因錯誤而no disk space available而失敗。

有沒有辦法將ASP.NET 5應用程序發布到Azure Web App?

簡答

但是當我發布它並嘗試打開時,我看到只是不間斷加載空頁面。

當我們的應用程序無法使用應用程序發布運行時( dnx.exe )時會發生這種情況。

討論

有幾種方法可以將ASP.NET Core rc1應用程序發布到Azure Web App。 其中包括使用Git進行持續部署以及使用Visual Studio進行發布。 發布存儲庫的內容以獲取特定幫助。

該示例是一個ASP.NET Core rc1應用程序,通過GitHub持續部署部署到Azure Web App。 這些是至關重要的文件。

app/
    wwwroot/
        web.config
    project.json
    startup.cs
.deployment           <-- optional: if your app is not in the repo root 
global.json           <-- optional: if you need dnxcore50 support

應用程序/ wwwroot的/ web.config中

添加HttpPlatformHandler 將其配置為將所有請求轉發到DNX進程。 換句話說,告訴Azure Web應用程序使用DNX。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" 
           path="*" verb="*" 
           modules="httpPlatformHandler" 
           resourceType="Unspecified"/>
    </handlers>
    <httpPlatform 
         processPath="%DNX_PATH%" 
         arguments="%DNX_ARGS%" 
         stdoutLogEnabled="false" 
         startupTimeLimit="3600"/>
  </system.webServer>
</configuration>

應用程序/ project.json

在Kestrel服務器上包含依賴項。 設置將啟動Kestrel的web命令。 使用dnx451作為目標框架。 請參閱下文,了解針對dnxCore50的其他工作。

{
  "dependencies": {
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  },

  "frameworks": {
    "dnx451": { }
  }
}

應用程序/ Startup.cs

包括Configure方法。 這個添加了一個非常簡單的響應處理程序

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;

namespace WebNotWar
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync(
                    "Hello from a minimal ASP.NET Core rc1 Web App.");
            });
        }
    }
}

.deployment (可選)

如果您的應用程序不在存儲庫根目錄中,請告知Azure Web App哪個目錄包含該應用程序。

[config]
project =  app/

global.json (可選)

如果您希望以.NET Core為目標,請告訴Azure我們要將其作為目標。 添加此文件后,我們可以替換(或補充)的dnx451在我們與project.json進入dnxCore50

{
  "sdk": {
    "version": "1.0.0-rc1-update1",
    "runtime": "coreclr",
    "architecture": "x64"
  }
}

首先,是的,您可以愉快地在Azure上運行ASP.Net 5核心應用程序,但有一些問題。

知道為什么當你從Visual Studio本身發布時它不起作用(所以為什么他發布了我聽到你問的答案......),但這里有一些東西可以看一看;

  • 嘗試在本地運行IIS(而不是紅隼) - 只是為了查看是否存在問題。 例如,您需要具有某些設置的Web.config, 或者您需要startup.cs中的app.UseIISPlatformHandler。
  • 看看你的global.json文件。 當您從Visual Studio發布,但它不會傷害到正確設置此它不應該的問題。 你可以這樣做:

{
  "sdk": {
    "version": "1.0.0-rc1-update1",
    "runtime": "coreclr",
    "architecture": "x64"
  }
}

關於連續發布 - 這是一個已知的免費和共享網站問題,而且花費了我幾個小時。 基本上,當您通過此機制進行部署並指定corecelr時,整個運行時將從Nuget重新安裝,並占用近1GB(免費和共享站點的容量)。 添加一些NPM包,你已超出限制,嘿,你無法部署。 @shanselman最近在他的一個播客上討論過它。 實際上並不是占用所有空間的運行時二進制文件,但由於我們處於構建模式,因此也安裝了所有文檔XML文件,因為Nuget不知道您不在開發環境中,而且它們非常龐大。 現在,如果您想在免費共享站點上使用連續發布,最簡單的答案是在project.json中包含完整的運行時,並將global.json設置為使用完整的CLR而不是coreclr。 非常令人沮喪。

我遇到了同樣的問題。 這個答案解決了這個問題。

使用asp.net核心模板創建新項目時, global.json文件是我的API項目的一部分,但它也在Solution Items文件夾中引用。 發布到Azure API應用程序時,部署了兩個global.json文件:

  1. /approot/global.json
  2. /approot/src/MyAPI/global.json

我將global.json文件從項目文件夾中移出到解決方案根目錄,然后將引用重新添加回Solution Items文件夾。

部署后,只部署了/approot/global.json文件,解決了問題。

暫無
暫無

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

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