使用Windows Terminal进行SSH登录

安装Windows Terminal 注意:Windows Terminal 需要 Windows 10 1903 (build 18362) 或更新版本 通过微软商店 (Microsoft Store) 安装【官方推荐】 在微软商店搜索“Windows Terminal”安装即可 在 Github 上下载 在 Terminal 官方仓库的 Releases page 页面下载。选择最新版本的Microsoft.WindowsTerminalPreview_<版本号>_8wekyb3d8bbwe.msixbundle下载,双击安装即可。 通过 Chocolatey 安装(非官方) 在已安装 Chocolatey 的情况下,执行命令: choco install microsoft-windows-terminal 其他更多方式请参见 Windows Terminal 官方 GitHub 仓库 设置SSH登录 首先进入 Windows Terminal 设置界面: 在设置解密左侧最下方点击“打开JSON文件”,这时系统会调用默认文本编辑器打开配置文件。 在文本编辑器中找到 profiles => list 节点: 在list中添加一个节点: { "guid": "{a10c1013-d3f4-479c-bb69-7899e7597871}", "hidden": false, "name": "my_server", "commandline" : "ssh -i <username>@<ip/url> -p<ssh端口号>", "icon": "<icon path>" } guid:连接表示,全局唯一,可以通过Online GUID / UUID Generator生成 hidden:是否隐藏,默认即可 name:在标签栏显示的名称 commandline:命令行命令,请将尖括号相关内容替换成自己的 icon:标签栏显示的图标,可以是本地图片,也可以是网络图片 如果你要连接的远程设备是通过账号密码登录的话,那么此时保存配置并重新打开 Windows Terminal 即可使用。...

December 13, 2021 · 1 分钟 · Remo

Asp.Net Core使用Quartz.NET实现简单定时任务

所需 Nuget 包 Quartz.AspNetCore Quartz Quartz.Extensions.DependencyInjection Quartz.Extensions.Hosting 本示例仅需从nuget安装第一个包即可,其他三个包会通过依赖关系自动安装。 示例代码 本文基于.NET 6最新的模板。 新建一个cs文件,如ExampleJob.cs: [DisallowConcurrentExecution] public class ExampleJob : IJob { public async Task Execute(IJobExecutionContext context) { try { //这里是需要定时执行的相关代码 } catch (Exception e) { //异常处理 } } } 在Program.cs中添加: builder.Services.AddQuartz(config => { config.UseDefaultThreadPool(options => { options.MaxConcurrency = 2; }); config.UseMicrosoftDependencyInjectionJobFactory(); config.ScheduleJob<ExampleJob>(trigger => trigger .WithIdentity("ExampleTrigger") //立即开始第一次执行 .StartNow() //此后每次执行的间隔,这里是1小时,并且一直重复下去 .WithSimpleSchedule(x=>x.WithIntervalInHours(1).RepeatForever()) .WithDescription("A simple example")); }); // Quartz.Extensions.Hosting hosting builder....

December 7, 2021 · 1 分钟 · Remo

我有对象啦

我很爱她!恭喜我吧🎉

November 28, 2021 · 1 分钟 · Remo

AspectCore 配合 Log4Net 全局记录Asp.Net Core Web Api异常日志

配置AspectCore-Framework 首先通过Nuget安装AspectCore.Extensions.DependencyInjection。 接下来我们可以配置拦截器: //继承自AbstractInterceptorAttribute public class CustomInterceptorAttribute : AbstractInterceptorAttribute { public override async Task Invoke(AspectContext context, AspectDelegate next) { try { Console.WriteLine("调用前"); await next(context);//执行调用的方法等 } catch (Exception ex) { Console.WriteLine("捕获到异常"); throw; } finally { Console.WriteLine("调用结束"); } } } 然后在Startup.cs中的ConfigureServices方法中配置代理(.NET6中对应的是builder.Services) services.ConfigureDynamicProxy(config => { services.AddTransient<IExmapleService, ExmapleService>(); services.AddControllers(); config.Interceptors.AddTyped<CustomInterceptorAttribute>(Predicates.ForService("*Service")); config.Interceptors.AddTyped<CustomInterceptorAttribute>(Predicates.ForService("*Controller")); }); 以上配置是对名称以Service或Controller结尾的进行代理,还有其他一些规则如: //全部代理 config.Interceptors.AddTyped<CustomInterceptorAttribute>(); //名称以Execute开头的方法会被代理 config.Interceptors.AddTyped<CustomInterceptorAttribute>(Predicates.ForMethod("Execute*")); //以Service结尾则不会被代理 config.NonAspectPredicates.AddService("Service"); //更多详细规则可以查阅官方文档 //https://github.com/dotnetcore/AspectCore-Framework/blob/master/docs/1.%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.md ...... 也可以通过NonAspectAttribute对Service或Method进行单独设置: //无论在Startup.cs中如何配置,该接口都不会通过代理 [NonAspect] public interface IExampleService { void Method(); } 最后在Program....

February 27, 2021 · 2 分钟 · Remo

使用AutoMapper自动映射

安装Nuget包 通过.Net CLI安装 dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection --version 8.1.0 该包会自动安装AutoMapper的依赖包。 配置AutoMapper 在Startup.cs的ConfigureServices方法中配置: services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //也可以如下指定项目: //services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.Location.Contains("ExampleSolution.Model"))); 接下来在ConfigureServices中添加: services.AddAutoMapperProfiles(Configuration); 然后为每个需要映射的类之间添加配置,如: public class ExmapleProfile : Profile { public ExmapleProfile() { //这里的映射方向是单向的,如不需要从ExmapleViewModel转Exmaple,则第二条就可以不用写 CreateMap<Exmaple, ExmapleViewModel>(); CreateMap<ExmapleViewModel, Exmaple>(); } } 使用 通过构造函数注入: private readonly IMapper _mapper; public ExmapleController(IMapper mapper) { _mapper = mapper; } 使用: public ActionResult ExmapleMethod() { ...... Exmaple entity = new Exmaple(); ExmapleViewModel entityVM = _mapper.Map<ExmapleViewModel>(entity); ...... }

January 15, 2021 · 1 分钟 · Remo