zoukankan      html  css  js  c++  java
  • .Net Core Linux部署

    .Net Core是微软最新的开源框架跨平台框架 官网文档

    .Net Core相关发布指令,以及发布RId便于查看 RID链接

    .Net Core要想发布到Linux有俩种方案,分别是依赖框架的部署(FDD)以及独立部署(SCD)

    依赖框架的部署 (FDD)

    定义

    框架依赖的部署:顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core。 由于已存在 .NET Core,因此应用在 .NET Core 安装程序间也是可移植的。 应用仅包含其自己的代码和任何位于 .NET Core 库外的第三方依赖项。 FDD 包含可通过在命令行中使用 dotnet 实用程序启动的 .dll 文件。 例如,dotnet app.dll 就可以运行一个名为 app 的应用程序。
    对于 FDD,仅部署应用程序和第三方依赖项。 不需要部署 .NET Core,因为应用将使用目标系统上存在的 .NET Core 版本。 这是定目标到 .NET Core 的 .NET Core 和 ASP.NET Core 应用程序的默认部署模型。

    优点

    • 不需要提前定义 .NET Core 应用将在其上运行的目标操作系统。 因为无论什么操作系统,.NET Core 的可执行文件和库都是用通用的 PE 文件格式,因此,无论什么基础操作系统,.NET Core 都可执行应用。
    • 部署包很小。 只需部署应用及其依赖项,而无需部署 .NET Core 本身。
    • 许多应用都可使用相同的 .NET Core 安装,从而降低了主机系统上磁盘空间和内存使用量。

    缺点

    • 仅当主机系统上已安装你设为目标的 .NET Core 版本或更高版本时,应用才能运行。
    • 如果不了解将来版本,.NET Core 运行时和库可能发生更改。 在极少数情况下,这可能会更改应用的行为。

    独立部署 (SCD)

    定义

    独立部署:与 FDD 不同,独立部署 (SCD) 不依赖目标系统上存在的共享组件。 所有组件(包括 .NET Core 库和 .NET Core 运行时)都包含在应用程序中,并且独立于其他 .NET Core 应用程序。 SCD 包括一个可执行文件(如 Windows 平台上名为 app 的应用程序的 app.exe),它是特定于平台的 .NET Core 主机的重命名版本,还包括一个 .dll 文件(如 app.dll),而它是实际的应用程序。
    对于独立部署,可以部署应用和所需的第三方依赖项以及生成应用所使用的 .NET Core 版本。 创建 SCD 不包括各种平台上的 .NET Core 本机依赖项,因此运行应用前这些依赖项必须已存在。 
    从 NET Core 2.1 SDK(版本 2.1.300)开始,.NET Core 支持修补程序版本前滚。 在创建独立部署时,.NET Core 工具会自动包含你的应用程序所指向的 .NET Core 版本的最新服务的运行时。 (最新服务的运行时包括安全修补程序和其他 bug 修复程序。)服务的运行时不需要存在于你的生成系统上;它会从 NuGet.org 自动下载。
    FDD 和 SCD 部署使用单独的主机可执行文件,使你可以使用发布者签名为 SCD 签署主机可执行文件。

    优点

    • 可以对与应用一起部署的 .NET Core 版本具有单独的控制权
    • 请放心,目标系统可以运行你的 .NET Core 应用,因为你提供的是应用将在其上运行的 .NET Core 版本

    缺点

    • 由于 .NET Core 包含在部署包中,因此必须提前选择为其生成部署包的目标平台
    • 部署包相对较大,因为需要将 .NET Core 和应用及其第三方依赖项包括在内。

    从.NET Core 2.0 开始,可以通过使用 .NET Core 全球化固定模式在 Linux 系统上减少大约 28 MB 的部署大小。 通常,Linux 上的 .NET Core 依赖于 ICU 库来实现全球化支持。 在固定模式下,库不包含在部署中,并且所有区域性的行为均类似于固定区域性。

     本文采用FDD部署的方式:

           我用的服务器是Centos,首先安装.Net Core SDK 和RunTime CLI 下载链接 根本使用版本选择。

           PS:如果只运行不需要构建应用可直接安装运行时,否则需要安装SDK不然有些Dotnet命令无法使用。

     常用命令:

    • nohup dotnet run > test.log 2>&1 & 后台运行并且窗口输出     #Tips 发现这个命令应该是会有一些输入 导致进程挂掉所以没有上了后台  #查看进程占用
    • ps -ef | grep dotnet  #dotnet 后台进程查看
    • cat /proc/PID/status      #dotnet 进程资源查看

          PS:踩过的一个坑,如果使用nohup命令后台运行爆了这个异常,原因需要查看主线程是否用了Console.Read等函数来维持运行,nohup切换后台的时候需要按下回车,这个回车会输入导致程序退出。

    Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied. ---> System.IO.IOException: Bad file descriptor
       --- End of inner exception stack trace ---
       at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
       at Interop.CheckIo(Int64 result, String path, Boolean isDirectory, Func`2 errorRewriter)
       at System.ConsolePal.Read(SafeFileHandle fd, Byte[] buffer, Int32 offset, Int32 count)
       at System.ConsolePal.UnixConsoleStream.Read(Byte[] buffer, Int32 offset, Int32 count)
       at System.IO.StreamReader.ReadBuffer()
       at System.IO.StreamReader.Read()
       at System.IO.SyncTextReader.Read()
       at System.Console.Read()
       at Lwcc.Prepare.Program.Main(String[] args) in /home/lwccrelease/LwccPrepare/Program.cs:line 24
  • 相关阅读:
    腾讯2014 笔试
    iOS 并发编程之 Operation Queues
    iOS 架构
    loadView and viewDidLoad?
    Referring to weak self inside a nested block
    Weakify和strongify探究
    iOS开发的最佳实践
    iOS 书籍
    Object-C非正式协议与正式协议的区别
    解决element-ui中el-menu组件作为vue-router模式在刷新页面后default-active属性与当前路由页面不一致问题的方法
  • 原文地址:https://www.cnblogs.com/dlvguo/p/10924093.html
Copyright © 2011-2022 走看看