我们如何在 netlify 中发布 dotnet 核心应用程序?

Posted

技术标签:

【中文标题】我们如何在 netlify 中发布 dotnet 核心应用程序?【英文标题】:how can we publish a dotnet core app in netlify? 【发布时间】:2020-09-12 10:51:20 【问题描述】:

我正在尝试在 netlify 中发布一个家庭作业应用程序。但是当我尝试部署它时会出错。

这是部署日志。

9:25:34 PM:构建准备开始 9:25:36 PM:构建映像版本: 30f629161c0736b1a3ecd8b418e5eeffab5c0faf 9:25:36 PM:构建映像标签: v3.3.14 9:25:36 PM:buildbot 版本: 80440c4491d323247b9d55f7bea2ea6bc96ce8d2 9:25:36 PM:获取缓存 依赖项 9:25:37 PM:开始下载 252.0MB 的缓存 9:25:38 PM:在 1.125171279s 完成下载缓存 9:25:38 PM:开始 提取缓存 9:25:47 PM:在 9.35605714 秒内完成提取缓存 9:25:47 PM:在 10.542038119 秒 9:25:47 PM 完成获取缓存: 开始为构建准备仓库 9:25:47 PM:准备 Git 参考 refs/heads/master 9:25:48 PM:开始构建脚本 9:25:48 PM:安装依赖项 9:25:49 PM:开始恢复缓存节点 版本 9:25:51 PM:完成恢复缓存节点版本 9:25:52 PM: v10.20.1 已经安装。晚上 9:25:53:现在使用节点 v10.20.1 (npm v6.14.4) 9:25:53 PM:开始恢复缓存的构建插件 9:25:53 PM:完成恢复缓存的构建插件 9:25:53 PM: 尝试 ruby​​ 版本 2.6.2,从环境中读取 9:25:54 PM:使用 ruby 版本 2.6.2 9:25:54 PM:使用 php 版本 5.6 9:25:54 PM:5.2 已安装。晚上 9 点 25 分 54 秒:使用 Swift 5.2 版 晚上 9 点 25 分 54 秒: 开始恢复缓存的 go cache 9:25:54 PM:完成恢复 缓存 go cache 9:25:54 PM:go 版本 go1.12 linux/amd64 9:25:54 PM: go version go1.12 linux/amd64 9:25:54 PM:安装缺少的命令 9:25:54 PM:验证运行目录 9:25:54 PM:执行用户命令: dotnet build 9:25:59 PM:Microsoft (R) Build Engine 版本 .NET Core 的 16.6.0+5ff7b0c9e 晚上 9:25:59:版权所有 (C) Microsoft Corporation。版权所有。 9:26:01 PM:确定项目 恢复... 9:26:04 PM:恢复 /opt/build/repo/Electronic-Products-Market-Database-Management-System.csproj (在 2.21 秒内)。晚上 9 点 26 分 12 秒: 电子产品-市场-数据库-管理-系统-> /opt/build/repo/bin/Debug/netcoreapp3.1/Electronic-Products-Market-Database-Management-System.dll 9:26:12 PM:电子产品-市场-数据库-管理-系统-> /opt/build/repo/bin/Debug/netcoreapp3.1/Electronic-Products-Market-Database-Management-System.Views.dll 9:26:13 PM:构建成功。晚上 9:26:13:0 个警告 晚上 9:26:13: 0 错误 9:26:13 PM:经过的时间 00:00:13.37 9:26:13 PM:跳过 功能准备步骤:没有设置功能目录 9:26:13 PM: 缓存工件 9:26:13 PM:开始保存构建插件 9:26:13 PM: 完成保存构建插件 9:26:13 PM:开始保存 pip 缓存 9:26:20 PM:完成保存 pip 缓存 9:26:20 PM:开始保存 emacs cask 依赖项 9:26:20 PM:完成保存 emacs cask 依赖项 9:26:20 PM:开始保存 maven 依赖项 9:26:20 PM:完成 保存 maven 依赖项 9:26:20 PM:开始保存启动依赖项 9:26:20 PM:完成保存启动依赖项 9:26:20 PM:开始 保存 Go 依赖项 9:26:20 PM:完成保存 Go 依赖项 9:26:20 PM:9:26:20 PM:**警告** 9:26:20 PM:有一些 即使在构建过程完成后仍然存在的过程:晚上 9:26:20: 用户 PID %CPU %MEM VSZ RSS TTY STAT 开始时间 命令 9:26:20 PM:buildbot 1285 27.9 0.6 28786512 187172 ? Sl 18:26 0:03 /opt/buildhome/.dotnet/dotnet exec /opt/buildhome/.dotnet/sdk/3.1.300/Roslyn/bincore/VBCSCompiler.dll -管道名称:32wBLnYyW2__v++qn9hs3AnpT7QZOsyeYeOn6hJdLao 9:26:20 PM:buildbot 1311 20.5 0.4 28228864 128840 ? 18:26 0:02 /opt/buildhome/.dotnet/dotnet /opt/buildhome/.dotnet/sdk/3.1.300/Sdks/Microsoft.NET.Sdk.Razor/tools/netcoreapp3.0/rzc.dll server -p buildbot.XiJojHVTENZ4oaYBDyZsHSy+b 9:26:20 PM:我们的构建 不会自动终止您的进程,因此请确保晚上 9:26:20: 构建完成后没有任何东西在运行,否则它将是 标记为 9:26:20 PM:失败,因为某些东西仍在运行。 9:26:20 PM:9:26:20 PM:构建脚本成功 9:26:20 PM:开始部署 来自“bin/Debug/netcoreapp3.1/publish”的站点 9:26:20 PM:正在创建 部署树 9:26:20 PM:创建部署上传记录 9:26:20 PM:0 新文件上传 9:26:20 PM:0 新功能上传 9:26:20 PM: 晚上 9:26:20 开始后期处理: 晚上 9:26:20 完成后期处理: 网站上线 9:27:02 PM:已完成处理构建请求 1m25.952288421s

如果您知道在 netlify 上构建 dotnet 核心应用程序的指南,请告诉我。

【问题讨论】:

1.作为一个正交问题,您应该使用dotnet publish,而不是dotnet build 来发布应用程序。 2. 我只看到 netlify 文档提到 static 网站。 ASP.NET Core 应用程序与静态网站相反。 【参考方案1】:

这是不可能的。

我搜索了 Netilfy 文档。你所要求的是不可能的:https://community.netlify.com/t/support-guide-can-i-run-a-web-server-http-listener-and-or-database-at-netlify/3078:

如何在 Netlify 运行服务器/数据库?

我们经常收到有关如何在 Netlify 运行特定后端服务器或 > 数据库的问题。这类问题的示例包括:

如何让我的节点 HTTP 侦听器响应请求? 如何启动 Mongo/mysql/ 在服务器上运行? 如何通过 SSH 访问我的网站?

我们今天在这里回答这些问题 - 答案是:你不能!

...Netlify 的 CDN/ADN 仅提供静态文件....

原答案

还有一些调试问题的提示。

您是否完整阅读了错误消息?它说:

9:26:20 PM: ** WARNING ** 
9:26:20 PM: There are some lingering processes even after the build process finished

然后

9:26:20 PM: Our builds do not kill your processes automatically, so please make sure
9:26:20 PM: that nothing is running after your build finishes, or it will be marked as
9:26:20 PM: failed since something is still running.

它甚至可以告诉您正在运行的内容:

9:26:20 PM: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
9:26:20 PM: buildbot 1285 27.9 0.6 28786512 187172 ? Sl 18:26 0:03 /opt/buildhome/.dotnet/dotnet exec /opt/buildhome/.dotnet/sdk/3.1.300/Roslyn/bincore/VBCSCompiler.dll -pipename:32wBLnYyW2__v++qn9hs3AnpT7QZOsyeYeOn6hJdLao 
9:26:20 PM: buildbot 1311 20.5 0.4 28228864 128840 ? Sl 18:26 0:02 /opt/buildhome/.dotnet/dotnet /opt/buildhome/.dotnet/sdk/3.1.300/Sdks/Microsoft.NET.Sdk.Razor/tools/netcoreapp3.0/rzc.dll server -p buildbot.XiJojHVTENZ4oaYBDyZsHSy+b

看起来有 2 个dotnet 进程在您的构建结束时仍在运行,这使得构建失败。它们是 .NET Core 编译服务器 (VBCSCompiler.dll) 和 Razor 页面编译器 (rzc.dll)。

这是一个众所周知的问题:https://github.com/dotnet/sdk/issues/9487。引用该错误报告:

使用 -p:UseRazorBuildServer=false 禁用 Razor (rzc) 服务器。

使用 -p:UseSharedCompilation=false 禁用 Roslyn (vbcscompiler) 服务器。

所以修改你的dotnet build(或publish)命令运行如下:

dotnet build -p:UseRazorBuildServer=false -p:UseSharedCompilation=false [your other options] 

【讨论】:

以上是关于我们如何在 netlify 中发布 dotnet 核心应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Vue Webpack-simple 应用程序部署到 Netlify?

Netlify 和 ngrok 链接

如何将 express.js 服务器部署到 Netlify

在Netlify上发布GitHub中基于Hugo的静态网站

在Netlify上发布GitHub中基于Hugo的静态网站

如何在 dotnet core 中制作自定义身份验证过滤器,如 Iauthentication