C# .NET Core 3.1 中 AssemblyLoadContext 的基本使用 前言 之前使用 AppDomain 写过一个动态加载和释放程序的案例,基本实现了自己"兔死狗烹",不留痕迹的设想.无奈在最新的 .NET Core 3.1 中,已经不支持创建新的 AppDomain 了(据说是因为跨平台实现太重了),改为使用 AssemblyLoadContext 了.不过总体使用下来感觉比原来的 AppDomain 要直观. 不过这一路查找资料,感觉 .NET Core 发展到…
一般情况下,一个 .NET 程序集加载到程序中以后,它的类型信息以及原生代码等数据会一直保留在内存中,.NET 运行时无法回收它们,如果我们要实现插件热加载 (例如 Razor 或 Aspx 模版的热更新) 则会造成内存泄漏.在以往,我们可以使用 .NET Framework 的 AppDomain 机制,或者使用解释器 (有一定的性能损失),或者在编译一定次数以后重启程序 (Asp.NET 的 numRecompilesBeforeAppRestart) 来避免内存泄漏. 因为 .NET Co…
动态加载程序集在一些插件式的应用中非常常见,.net core 2.0中可以通过AssemblyLoadContext中提供程序集的动态加载功能,但取不支持卸载.现在,在.net core 3.0中提供了程序集卸载的支持(Collectible AssemblyLoadContext),更加完善了这方面的功能. 由于AssemblyLoadContext是一个抽象类,要实现这个动态程序集回收,需要实现自己的AssemblyLoadContext类,并且设置基类构造函数isCollectible为…
前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI 的移植工作,移植过后还有一些Bug需要修复,然后一个事情是一个有关于分布式架构中消息一致性的一个中间件设计开发工作,还有就是博客还要坚持写,最后就是还有好几本书需要读,以及消化学习,所以深深感觉到时间不够用.废话不多说了,进入主题. 大部分中间件都是要依赖于 HTTP 管道和 HttpAbstra…
之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制不了解,竟然无从下手. 今天正准备阅读 Microsoft.Extensions.DependencyInjection 的源代码,发现园子里的一篇博文 ASP.NET Core 源码阅读笔记(1) ---Microsoft.Extensions.DependencyInjection,读后豁然开朗…
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i=arguments;t.queue.push(function(){t[config].apply(t,i)})}}var t={config:config},u=document,e=window,o="script",s=u.createElement(o),i,f;for(s.src…
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:目前.NET Core 1.0中并没有提供SMTP相关的类库,那么要如何从ASP.NET Core 1.0中发送邮件呢?本文将介绍几种可行的方式. 由于.NET Core是微软重写的一个开源跨平台.NET运行时,所以其中裁剪了很多非核心的类库.比如你现在无法在.NET Core或ASP.NET Core中使用System.Net.Mail的SmtpClient来发送邮件了,那么还有什么办法呢?…
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于EF Core暂时不支持Lazy Loading,所以利用Include来加载额外数据就显得很有必要.今天分享一个使用Include的小技巧. 在实体框架Entity Framework 6及之前的版本中,数据模型的导航属性只要加上virtual关键字,在你访问这个属性的时候(不管是对象还是对象集合),EF的内部机制就会自动加载相关数据.这一特性就称之为Lazy Loading,其为开发带…
github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1.0中同样也支持. 依赖包 "dependencies": { "Swashbuckle.SwaggerGen": "6.0.0-rc1-final", "Swashbuckle.SwaggerUi": "6.0.0-rc…
准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试一下,何况是开源,下面是代码可实现SMTP邮件发送: using MailKit.Net.Smtp; using MailKit.Security; using MimeKit; using System.Threading.Tasks; namespace ConsoleApp1 { public…
ASP.NET Core 1.0中的管道-中间件模式 SP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合并且非常灵活,你可以自己定义任意功能的Middleware注册在管道中.这一设计非常适用于“请求-响应”这样的场景——消息从管道头流入最后反向流出. 在本文中暂且为这种模式起名叫做“管道-中间件(Pipeline-Middleware)”模式吧.…
Entity Framework Core 2.0 中使用LIKE 操作符 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-like-operator/ Entity Framework Core 2.0 早前发布,它带来了一些新的.很酷的特性.其中一个是SQL like操作符,我们现在可以直接在代码中使用它.下面是一个简单的web应…
HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务端接口的耦合度.很多当今流行的RESTful API开发框架,包括Spring REST,也都默认支持HAL规范,当RESTful API被调用后,服务端就会返回ContentType为application/hal+json的JSON内容,例如: { "_links": { "…
在ASP.NET Core中关于Security有两个容易混淆的概念一个是Authentication(认证),一个是Authorization(授权).而前者是确定用户是谁的过程,后者是围绕着他们允许做什么,今天的主题就是关于在ASP.NET Core 2.0中如何使用CookieAuthentication认证. 在ASP.NET Core 2.0中使用CookieAuthentication跟在1.0中有些不同,需要在ConfigureServices和Configure中分别设置,前者我…
在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 HomeController.cs 进行演示. 需要 using Microsoft.Extensions.Logging; 方案一: public class HomeController : Controller { private readonly ILogger _logger ; public…
前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 CTO 以及主管的个人能力也是分不开的),业界前沿的技术概念也都能在上手的项目中出现.所以虽然现在团队仍然处于疾速的发展中,也存在一些奇奇怪怪的事情,工作内容也算有紧有松,但是总体来说也算有苦有乐,不是十分排斥. 其实这样的环境有些类似于笔者心中的"圣地" Thoughtworks 的…
今天,Visual Studio中没有内置工具来测试WEB API.使用浏览器,只能测试http GET请求.您需要使用Postman,SoapUI,Fiddler或Swagger等第三方工具来执行WEB API的完整测试.在ASP.NET Core 2.2中,引入了一个名为“http-repl”的基于CLI的新dotnet核心全局工具,用于与API端点交互.它是一个基于CLI的工具,可以列出所有路由并执行所有HTTP动词.在这篇文章中,让我们了解如何使用HTTP-REPL工具在ASP.NET…
.NET Core 3.0 是 .NET Core 平台的下一主要版本.本文回顾了 .Net Core 发展历史,并展示了它是如何从基本支持 Web 和数据工作负载的版本 1,发展成为能够运行 Web.桌面.机器学习.容器.IoT 等的版本 3.0. .NET Core 1 .NET Core 的历史可追溯到几年前,版本 1 是在 2016 年推出,旨在生成第一版开放源代码和跨平台(Windows.macOS 和 Linux)的 .NET.灵感来源于只能使用开放源代码框架的客户,以及需要在 Li…
来源: Using multiple instances of strongly-typed settings with named options in .NET Core 2.x 作者: Andrew Lock 译者: Lamond Lu .NET Core从1.0版本开始,就已经开始使用Options模式绑定强类型配置对象.从那时起到现在,这个特性已经获得了更多的功能.例如在.NET Core 1.1中引入的IOptionsSnapshot类.使用这个类的好处是,当你的配置文件(例如: a…
.NET CORE微服务中CONSUL的相关使用 1.consul在微服务中的作用 consul主要做三件事:1.提供服务到ip的注册 2.提供ip到服务地址的列表查询 3.对提供服务方做健康检查(定时调用服务方一个用于健康检查的api接口 告诉消费方,服务方的服务是否还存在) 2.consul的下载及安装 1.consul的下载地址 www..consul.io 2.consul的安装   consul agent -dev  开发环境测试,在生产环境中要建立集群 3.consul的监控页面…
在.NET Core WEB API中参数的模型绑定方式有以下表格中的几种: 微软官方文档说明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-2.1 特性   绑定源 [FromHeader] 请求标头 [FromQuery] 请求查询字符串参数 [FromForm] 请求正文中的表单数据 [FromBody] 请求正文 [FromRoute] 当前请求中的路由 [FromServices] 作为操…
ASP.NET Core 2.1中基于角色的授权 授权是来描述用户能够做什么的过程.例如,只允许管理员用户可以在电脑上进行软件的安装以及卸载.而非管理员用户只能使用软件而不能进行软件的安装以及卸载.它是独立的而又与验证配合使用,需要身份验证机制.对于应用程序来说,首先需要进行身份验证,然后进行进行授权. 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9508267.html Identity是一个会员资格系统,它允许我们将登录功能添加到我们的应用程序…
[译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/9276565.html 园子里关于ASP.NET Core Web API的教程很多,但大多都是使用EF+Mysql或者EF+MSSQL的文章.甚至关于ASP.NET Core Web API中使用Dapper+Mysql组合的文章都很少,更别提Oracel+Dapper组合的文章了,那么今天就带…
如果您是.NET性能的粉丝,最近有很多好消息,例如.NET Core 2.1中的性能改进和宣布.NET Core 2.1,但我们还有更多的好消息.分层编译是一项重要的新特性功能,我们可以作为预览供任何人试用,从.NET Core 2.1开始.在我们测试的许多场景中,应用程序启动更快,并且在稳定状态下运行得更快.一个在.NET Core 2.1上运行的项目,以及对环境变量或项目文件进行微不足道的更改以启用它.在本文的其余部分,我们将介绍它是什么,如何使用它,以及为什么它是2.1版本的隐藏技能! 什…
ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一些常见问题. 介绍 在.NETCore平台的2.1新增了HttpClientFactory,虽然HttpClient这个类实现了disposable,但使用它的时候用声明using包装块的方式通常不是最好的选择.处理HttpClient,底层socket套接字不会立即释放.该HttpClient类是专为多个请求重复使…
之前在 ASP.NET Core 2.0 中可以正常运行的代码: var services = HttpContext.RequestServices; var executor = services.GetRequiredService<ViewResultExecutor>(); var viewEngine = services.GetRequiredService<IRazorViewEngine>(); var view = viewEngine.GetView(null…
Endpoint路由 在ASP.NET Core 2.2中,新增了一种路由,叫做Endpoint(终结点)路由.本文将以往的路由系统称为传统路由. 本文通过源码的方式介绍传统路由和Endpoint路由部分核心功能和实现方法,具体功能上的差异见官方文档. 在升级到ASP.NET Core 2.2后,会自动启用Endpoint路由.如果要恢复以往的实现逻辑,需要加入以下代码: services.AddMvc(options => options.EnableEndpointRouting = fal…
在.net core 2.0中,我们使用的对象实例大多数都是通过构造函数依赖注入进来的,但那是在一般的类中使用. 如果需要在静态/扩展类中使用某些服务类的对象实例,可以使用如下方式: 1.新建一个ServiceLocator,包含一个IServiceProvider的静态对象实例,如下: public class ServiceLocator { public static IServiceProvider Services { get; private set; } public static…
C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关系映射来创建数据库与表 一 新建项目OrmDemo 二  添加 EntityFramework.dll 与System.Data.Entity.dll 引用,EntityFramework可直接在NuGet下载 三.创建实体类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15…
如何在ASP.NET Core 2.0中使用Razor页面  DotNetCore2017-11-22 14:49 问题 如何在ASP.NET Core 2.0中使用Razor页面 解 创建一个空的项目并修改Startup.cs文件以为MVC添加服务和中间件. publicvoid ConfigureServices( IServiceCollection services) { services.AddSingleton<IMovieService, MovieService>(); ser…