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 已 ...
随机推荐
- jennifersoft,phantomjs
http://jennifersoft.com/en/ Real Value of APM (Application Performance Monitoring) http://npm.taobao ...
- PuTTY/终端使用复制、粘贴
Putty鼠标按钮选项 通过鼠标按钮选项可以控制鼠标来进行复制.粘贴操作,选项包括: 1.Windows选项: 2.混合模式(系统默认选项): 3.Xterm模式. 以上是三种模式选项的简单介绍,下面 ...
- FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)
FPGA设计的是数字逻辑,在开始用HDL设计之前,需要先了解一下基本的数字逻辑设计-- 一门抽象的艺术. 现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号 ...
- JavaScript设计模式 Item 2 -- 接口的实现
1.接口概述 1.什么是接口? 接口是提供了一种用以说明一个对象应该具有哪些方法的手段.尽管它可以表明这些方法的语义,但它并不规定这些方法应该如何实现. 2. 接口之利 促进代码的重用. 接口可以告诉 ...
- 给xmpphp添加了几个常用的方法
给xmpphp添加给了以下的常用方法: registerNewUser //注册一个新用户 addRosterContact //发送添加好友的请求 acce ...
- 35.app后端搜索入门
现在人们的网络生活已经离不开搜索了,遇到不懂的问题,想知道的事情,搜索一下,就知道答案. 在app中,最常见的搜索情景就是搜索用户.只有几百,几千的用户量时,可以直接用用like这样的模糊查询,但是, ...
- 他学习一年Python找不到工作,大佬都说你别再学Python了!
引言: 都说,滴水穿石非一日之功.然而有些人即使奋斗一辈子也比不上别人一年,别人学习一年比不得你学习一个月.其中缘由,有些人看了大半辈子还没看明白. 即使Python这么火,为何你学习一年的Pytho ...
- engine.go
package ;;;;;;;;) ;;;;;) ) ) ) ;; ;;, types.DocumentIndexData{}, true) for { runtime.Gos ...
- 单机部署-consul
在本机开发环境中,直接通过以下命令可以启动一个单机consul服务器: ./consul agent -server -data-dir=/tmp/consul -bootstrap -adverti ...
- ASP.NET Core Identity Hands On(2)——注册、登录、Claim
上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...