ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署

原文:ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署

背景:

这周,心情来潮,想把 Aries 开发框架 和 Taurus 开发框架 给部署到Linux上,于是开始折腾了。

经过重重非人的坑,终于完成了任务:

Aries on CentOS7:mvc.aries.cyqdata.com

Taurus on CentOS7:mvc.taurus.cyqdata.com

不过在发布的过程中,发现有大堆共同的dll(100多个,20多M):

看见一大堆这些dll,感觉很影响视觉,而且多个项目就要上传多份,很是麻烦。

于是研究了一下,能不能把这些和项目的文件分开,独立到一个指定的目录中去。

研究过程:

为什么要研究,因为网上根本搜不到啊,我X,这.net core 都出这么多年了,就没人有点洁癖,把这事给解决然后写篇文章么!

1、本人机器早期装的是VS2017版本,发布版本时,没有“部署模式”选项。

2、后来升级了一下,发现版本选项里有“部署模式”选项,里面有框架依赖和独立两种,于是看了下相关说明:

.NET Core 应用程序部署

可以为 .NET Core 应用程序创建三种部署:

  • 依赖框架的部署。 顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core。 由于已存在 .NET Core,因此应用在 .NET Core 安装程序间也是可移植的。 应用仅包含其自己的代码和任何位于 .NET Core 库外的第三方依赖项。 FDD 包含可通过在命令行中使用 dotnet 实用程序启动的 .dll 文件。 例如,dotnet app.dll 就可以运行一个名为 app 的应用程序。
  • 独立部署。 与 FDD 不同,独立部署 (SCD) 不依赖目标系统上存在的共享组件。 所有组件(包括 .NET Core 库和 .NET Core 运行时)都包含在应用程序中,并且独立于其他 .NET Core 应用程序。 SCD 包括一个可执行文件(如 Windows 平台上名为 app 的应用程序的 app.exe),它是特定于平台的 .NET Core 主机的重命名版本,还包括一个 .dll 文件(如 app.dll),而它是实际的应用程序。
  • 依赖框架的可执行文件。 生成在目标平台上运行的可执行文件。 类似于 FDD,依赖框架的可执行文件 (FDE) 是特定于平台的,而不是自包含的。 这些部署的运行仍依赖于现有的 .NET Core 共享系统级版本。 与 SCD 不同,应用仅包含代码和任何位于 .NET Core 库外的第三方依赖项。FDE 生成在目标平台上运行的可执行文件。

经过研究测试,不管哪种方式,发布后,还是有一大堆Microsoft.XXXX.dll。

然后认真看仔细后发现,FDD部署,也是不处理依赖第三方依赖项的。

你连Microsoft和System打头的都叫第三方依赖项,哥也没办法了。

后来想到配置文件:*.runtimeconfig.json,感觉这里应该能折腾点什么。

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.0",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.0.0"
    },
    "configProperties": {
      "System.GC.Server": true
    }
  }
}

百了和runtimeconfig.json相关的文章,发现一篇翻译自老外的文章:

https://www.cnblogs.com/lwqlun/p/9704702.html

按着关键说明,以为找到了春天:

于是在:additionalProbingPaths 这个属性上陷入了不归路,特别是packages这个起名,让我一路以为它和第三方依赖包有关。

结果却不管怎么折腾,都悲催了。

最后只能看原文,然后看源码是怎么加载配置文件的。

配置文件加载的源码:https://github.com/dotnet/core-setup/blob/v2.1.3/src/corehost/cli/fxr/fx_muxer.cpp#L464

结果一堆C++,看的好不头痛,还是暂时放弃了,感觉情绪未到。

休息了一会,又重新把文章给仔细看了一下,开始关注了一下*.deps.json,

毕竟这个文件,默认是不用上传的,所以很自然性的被忽略了。

不过当我把它上传上去的时候,发现它被加载,而且,报错了。

感觉找到了方向:

现在仔细一看,deps应该depends依赖的简写,用于处理依赖包配置的。

解决方案:

Linux下的web目录是这样的:

于是,把*.deps.json里面 lib/开头的路径,全部给换成 /home/web/package ,然后上传,结果,OK了。

最后的部署目录,就剩下这么干净了:

总结:

虽然最后定位到deps.json可以处理这个事,不过默认产生的deps.json东西有点多,要替换的路径也有点多。

估计再研究一下,应该还可以简化一下这个工作。

原文地址:https://www.cnblogs.com/lonelyxmas/p/10546916.html

时间: 2024-11-29 10:28:07

ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署的相关文章

ASP.NET Core 共享第三方依赖库部署的Bug(*.deps.json on 2.2.0 or 4.6.0 版本)

背景: I try to put the Microsoft.*.dll and System.*.dll togather to a new folder.以便把(第三方或)系统的和应用的dll分开.之前花了很长的一段时间研究之后,最后:I find xxx.deps.json can make it work. 之后我还特意写了篇文章介绍它:https://www.cnblogs.com/cyq1162/p/10542832.html 今天遇Bug了: but today,when i up

ASP.NET Core 2.2 基础知识(一) 依赖注入

原文:ASP.NET Core 2.2 基础知识(一) 依赖注入 依赖: 类A用到了类B,我们就说类A依赖类B.如果一个类没有任何地方使用到,那这个类基本上可以删掉了. public class Test { private MyDependency md = new MyDependency(); public void Print() { md.Print(); } } public class MyDependency { public void Print() { Console.Wri

asp.net core在linux进行上传视频ffmpeg截图

项目要求,视频要提供一张截图.在linux使用ffmpeg,没有window方便可以直接用exe文件:因为我们使用的操作系统是centos7.0+ ,必须先安装; 1.在centos上安装FFMPEG; 所以先找了ffmpeg的安装.一开始,是网上一堆教程,全手动安装,安装过程遇到一堆问题.然后一个问题解决,又遇到另一个,然后了三四个问题后.最后果然放弃安装.从网上搜索到了yum install一键自动安装的.尝试了,可用.纪录 下来 第一步: 按照自己centOS版本安装 nux-dextop

如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?

我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合.对此比较了解的读者朋友应该很清楚,针对第三方DI框架的整合可以通过在定义Startup类型的ConfigureServices方法返回一个ServiceProvider来实现.但是真的有这么简单吗? 一.ConfigureServices方法返回的ServiceProvider貌似没有用!? 我们可以通过一个简单的

ASP.NET Core on K8S深入学习(2)部署过程解析与Dashboard

上一篇<K8S集群部署>中搭建好了一个最小化的K8S集群,这一篇我们来部署一个ASP.NET Core WebAPI项目来介绍一下整个部署过程的运行机制,然后部署一下Dashboard,完成可视化管理.本篇已加入了<.NET Core on K8S学习实践系列文章索引>,更多内容请到索引中查看. 一.部署示例项目 1.1 准备一个ASP.NET Core WebAPI 这里准备一个空的ASP.NET Core WebAPI项目,使用默认自带的ValuesController控制器,

jitpack让使用第三方依赖库更简单

在开发过程中,使用第三方优秀依赖库是个很常见的问题,有的时候是maven,或者gradle, 或者sbt,大部分库工程,都会有对应的gradle,maven依赖代码,但是有的没有,尤其是使用的snapshot的依赖的时候,虽然有源代码可以自己down下来,然后源码级别的依赖,或者自己导出jar包依赖,这个时候,神器jitpack就出现了. 使用灰常简单,去jitpack官网: <a href="https://jitpack.io/">点这里</a> 以Gith

asp.net core在linux上的部署调试

双十一买了阿里云的LINUX服务器三年¥720 把自己的niunan.net一系列网站都部署上去 用jexus来部署,部署时发现头一个网站没问题,但是后一个网站部署就有问题..输入域名打不开,但JEXUS的文件基本都是一样的 后来学会怎么在LINUX下看错误的: 1.开二个XSHELL连接上LINUX服务器.2. 停止jexus服务3. 到有问题的core网站目录下dotnet xxx.dll4. 在另一个窗口中curl http://127.0.0.1:5002 搞掂 ,慢慢排错吧,结果最后是

服务器环境迁移,Linux centos7 64位 基础环境部署 jdk+tomcat+mysql+nginx

最近阿里云服务器到期,这个周末连夜将服务器迁移到美国去了,为什么迁移到美国去呢?主要是因为阿里云服务器费用高,另外网站的访问量不大,对网速要求也不高,主要是宣传和信息传递的作用,加上本人之前在搬瓦工上租了vps,安装shadowsocks 跳墙用,所以想索性将服务器暂时放到国外算了,一举两用,也不用买别人的vpn代理用来跳墙了. 整个迁移过程和软件安装步骤如下: 首先在vps上安装了nginx,保证国内能访问,并且网速能接受nginx安装,之前在博客上写过部署,不过这个刚好借此机会汇总下: 1.

vs增加第三方依赖库的方法总结

转自http://blog.csdn.net/raodotcong/article/details/8998379 先说说普通的两种方法: 方法1:  通过设置工程配置来添加lib库. 转自网上: A.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. B.添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录.C  然后添加工程引用的lib文件名:工程---属性