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东西有点多,要替换的路径也有点多。
估计再研究一下,应该还可以简化一下这个工作。
补充说明:*.runtimeconfig.json里的additionalProbingPaths,这个属性也要加,不加会提示找不到文件。
ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署的更多相关文章
- ASP.NET Core 共享第三方依赖库部署的正常打开方式
曾经: 写了一篇: ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署 当第二次想做相同的事,却遇上了Bug,于是有了第二篇: ASP.NET Core 共享第三方依 ...
- 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分开 ...
- .NET跨平台之旅:博问站点迁移至ASP.NET Core on Linux并发布上线
Powered by ASP.NET Core on Linux! 我们全站的 .NET Core 迁移工作如火如荼,这是我们今年上半年的重要工作. 今天我们终于完成了博问产品(q.cnblogs.c ...
- ASP.NET Core使用Docker进行容器化托管和部署
一.课程介绍 人生苦短,我用.NET Core!今天给大家分享一下Asp.Net Core以Docker进行容器化部署托管,本课程并不是完完全全的零基础Docker入门教学,课程知识点难免有没覆盖全面 ...
- ASP.NET Core on K8S学习初探(3)部署API到K8S
在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...
- [ASP.NET Core开发实战]基础篇02 依赖注入
ASP.NET Core的底层机制之一是依赖注入(DI)设计模式,因此要好好掌握依赖注入的用法. 什么是依赖注入 我们看一下下面的例子: public class MyDependency { pub ...
- qt5.11.2+vs2017环境下配置pcl1.8.1以及第三方依赖库vtk的编译
1.准备工作 我所用的开发环境是win10下的qt5.11.2配置了vs2017的编译器,根据自己所用的VS的版本去官网下载对应版本的pcl库,如下 PCL-1.8.1-AllInOne-msvc20 ...
- 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合.对此比较了解的读 ...
- Jexus 5.8.3正式发布:Asp.Net Core在Linux上最友好服务器平台
Jexus Web Serever 是一款运行于 Linux 操作系统,以支持 ASP.NET.ASP.NET CORE.PHP 为特色的高性能 WEB 服务器和反向代理服务器.最新版 5.8.3 已 ...
随机推荐
- SSM-SpringMVC-26:SpringMVC异常骇级之自定义异常注解版
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 注解的方法实现异常解析,话不多说,直接搞起,和以前一样的习惯,和上篇博客一样的代码放后面,不一样的在前面 案 ...
- Spring Security4.1.3实现拦截登录后向登录页面跳转方式(redirect或forward)返回被拦截界面
一.看下内部原理 简化后的认证过程分为7步: 用户访问网站,打开了一个链接(origin url). 请求发送给服务器,服务器判断用户请求了受保护的资源. 由于用户没有登录,服务器重定向到登录页面 填 ...
- ubuntu16.04开机循环输入密码无法进入桌面的解决办法
前些天碰到一个头疼的问题,启动我的ubuntu之后,输入密码闪屏一下,又需要输入密码!!!于是再输还要再输!!!!! 经过百度一翻后终于找到原因和解决办法. 原来是我之前在profile文件里配置了一 ...
- CentOS6.5 安装Python2.7后, yum出现“No module named yum”错误
安装如下方法安装python2.7: yum install –y python27 python27-devel python-docutils cd /usr/bin/ rm -rf python ...
- 关于Kafka配额的讨论(2)
继续前一篇的讨论.前文中提到了两大类配额管理:基于带宽的以及基于CPU线程使用时间的.本文着重探讨基于CPU线程时间的配额管理. 定义 这类配额管理被称为请求配额(request quota),管理起 ...
- 【数学建模】【APIO2015】Palembang Bridges
Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 10000 ...
- BZOJ_2764_[JLOI2011]基因补全_DP_高精度
BZOJ_2764_[JLOI2011]基因补全_DP_高精度 Description 在生物课中我们学过,碱基组成了DNA(脱氧核糖核酸),他们分别可以用大写字母A,C,T,G表示,其中A总与T配对 ...
- BZOJ_3011_[Usaco2012 Dec]Running Away From the Barn _可并堆
BZOJ_3011_[Usaco2012 Dec]Running Away From the Barn _可并堆 Description 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于l的 ...
- 开发教程(四) MIP组件平台使用说明
组件审核平台用于上传 MIP 组件.经过自动校验之后,提交审核,通过审核的组件会定时推送到线上,供网站使用. 平台地址:https://www.mipengine.org/platform/ 1. 使 ...
- 阿里云大数据计算服务 - MaxCompute (原名 ODPS)
MaxCompute 是阿里EB级计算平台,经过十年磨砺,它成为阿里巴巴集团数据中台的计算核心和阿里云大数据的基础服务.去年MaxCompute 做了哪些工作,这些工作背后的原因是什么?大数据市场进入 ...