我在ASP.NET 5(CoreCLR)上有一个应用程序,我尝试将其发布到Microsoft Azure。我使用免费的Web App
(不是VDS)
我正在使用Visual Studio 2015 Publish->Microsoft Azure
和this instructions发布应用。
但是当我发布它并尝试打开时,我看到只是不间断加载空页面。我启用日志记录并从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?
答案 0 :(得分:5)
但是当我发布它并尝试打开时,我看到只是不间断加载空页面。
当我们的应用程序无法使用应用程序发布运行时(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
app / 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>
app / 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"
}
}
答案 1 :(得分:3)
首先,是的,您可以愉快地在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不知道您不在开发环境中,而且它们非常庞大。 现在,如果您想在 free 或 shared 站点上使用连续发布,最简单的答案是在project.json中包含完整的运行时并设置{{ 1}}使用完整的CLR而不是coreclr。非常令人沮丧。
答案 2 :(得分:0)
我遇到了同样的问题。这answer解决了这个问题。
使用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
文件,解决了问题。