今天所有开发环境已经迁移到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、依赖包变更问题及解决的更多相关文章

  1. 微软推出ASP.NET Core 2.0,并支持更新Visual Studio 2017

    微软推出ASP.NET Core 2.0的一般可用性,并发布.NET Core 2.0.该公司还推出了其旗舰集成开发环境(IDE)的更新:Visual Studio 2017版本15.3和Visual ...

  2. .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法

    行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...

  3. idea更新maven依赖包

    IntelljIdea 自动载入Maven依赖的功能很好用,但有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作,此时需要手动强制更新依赖. 如下: (1)右键单击项目: (2)在弹出菜 ...

  4. 把旧系统迁移到.Net Core 2.0 日记(3) - 详解依赖注入 (转)

    关于DI 依赖注入, 转载这篇文章, 写得很好的. ----------------------------- DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关 ...

  5. IntelliJ IDEA更新maven依赖包

    问题: IntelliJ IDEA自动载入Maven依赖的功能很好用,但有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作,此时需要手动强制更新依赖. 方法: 方法一: ①.右键单击项目 ...

  6. ASP.NET Core 1.0 中使用 Swagger 生成文档

    github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1. ...

  7. 【用户交互】APP没有退出前台但改变系统属性如何实时更新UI?监听系统广播,让用户交互更舒心~

    前日,一小伙伴问我一个问题,说它解决了半天都没解决这个问题,截图如下: 大概楼主理解如下: 如果在应用中有一个判断wifi的开关和一个当前音量大小的seekbar以及一个获取当前电量多少的按钮,想知道 ...

  8. 跨平台运行ASP.NET Core 1.0

    前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为  ...

  9. 跨平台运行ASP.NET Core 1.0(转载)

    前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为  ...

随机推荐

  1. 9.如何解决出现AXIOS的Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

    问题描述: 由于restful接口需要在头部header传递两个字段: Content-Type: application/jsonAccess-Token: 84c6635800b14e0eba4f ...

  2. H5学习第一周

    已经接触H5一个周了,经过学习,总算对H5有了一些了解和认知,下面就总结一下我对H5的认知和感悟. 首先接触的是H5的常用标签[meta],它有其以下常用属性 1.charset属性.单独使用,设置文 ...

  3. 【原创】 Docker 中 运行 ASP.NET Core 站点

    一. 建立 .NetCore 项目  a.新建项目 b.选择项目类型 c.添加控制器 d.添加视图 e.修改默认请求 f.发布 二. 准备 CentOS 环境 a.准备虚拟机 b.安装 docker ...

  4. Vijos 1033 整数分解(版本2)

    描述 整数分解(版本2) 一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大. 例 ...

  5. Java学习之路----计算圆形的面积和周长

    题目:计算圆形的面积,其中圆形的半径是随意指定. 源代码以及所有的分析思路都如下: import java.util.Scanner; //引入Scanner类 public class TestAr ...

  6. Java 多态透析 详细理解

    1:什么是多态 一个对象的多种状态 (老师)(员工)(儿子) 教师 a =老钟; 员工 b =老钟; 2:多态体现 父类引用变量指向了子类的对象          Father f = new Son ...

  7. 微信小程序选项卡功能

    首先看看微信小程序上的选项卡的效果 原理呢,就是先布局好(这就不必说了吧),然后在上面的每一个选项卡上都定义一个同样的点击事件,然后给每一个组件上绑定一个唯一的标识符,然后点击事件触发的时候,获取到绑 ...

  8. ReactiveSwift源码解析(七) Signal的CombineLatest的代码实现

    本篇博客我们就来聊一下combineLatest()的使用以及具体的实现方式.在之前的<iOS开发之ReactiveCocoa下的MVVM>的博客中我们已经聊过combineLatest( ...

  9. ASP.NET Core之跨平台的实时性能监控

    前言 前面我们聊了一下一个应用程序 应该监控的8个关键位置. . 嗯..地址如下: 应用程序的8个关键性能指标以及测量方法 最后卖了个小关子,是关于如何监控ASP.NET Core的. 今天我们就来讲 ...

  10. Tkinter开发第一个桌面程序HelloWorld

    在Python3中是tkinter,Python2中是Tkinter Tkinter是Python 官方承认的标准 GUI 方案(de-facto standard),因为是Python自带安装,决定 ...