[英]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本身發布時它不起作用(所以為什么他發布了我聽到你問的答案......),但這里有一些東西可以看一看;
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
文件:
/approot/global.json
/approot/src/MyAPI/global.json
我將global.json
文件從項目文件夾中移出到解決方案根目錄,然后將引用重新添加回Solution Items文件夾。
部署后,只部署了/approot/global.json
文件,解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.