HueiFeng

Microsoft MVP

.NET dotnet


.NET探索模型路由约定实现伪静态

概述 IPageRouteModelConvention接口用于自定义PageRouteModel,这个对象在Microsoft.AspNetCore.Mvc.ApplicationModels命名空间中, 代表着Razor Page路由设置,换句话说我们可以通过实现该接口覆盖默认的实现。 该接口需要实现一个成员void Apply(PageRouteModel model)。通过这个方法,我们可以访问有关当前路由设置的元数据,并根据需要对其内容进行修改。 下面示例,将解决提供一个伪静态的解决方案,因此我们可以通过index.html about.html....去访问我们的页面,也就是说我们可以从Index-Index.html的支持 public class HtmlExtensionPageRouteModelConvention : …

.NET .NET5

.NET中使用DebuggerDisplay轻松定制调试

前言 对于调试的方式有多种,不过在今天我们将看到的监视窗口对变量的监视,当然在这里我们是定制内部的变量值,或者说变量的显示与计算的内容。 注:监视窗口在调试时可以一次显示多个变量。“快速监视”对话框一次显示一个变量。 file DebuggerDisplayAttribute 在下面示例中,我们在类上添加DebuggerDisplay,添加字符串:("Name={Name},Age={Age}"): class Program { static void Main(string[] args) { Student student = new Student() { Name = Mr.A, Age = 18 }; …

.NET Debugging

.NET探索平台条件编译

前言 今天偶然机会,翻了一下大学期间的书籍《C程序设计》,好吧,当我翻着翻着,翻到了符号常量(#define指令)中,是啊,这是一个预处理器指令,记得在Magicodes.IE中针对平台选择不同的库,哈哈,这是一个典型的根据平台进行条件处理,好吧, 根据这些内容,让我感觉在今天,我需要对#define指令以及在.NET中的平台条件处理,以及平台的条件编译进行记录一下。 file define 我们可通过define来定义符号,然后将符号用在#if指令表达式中,如下所示: #define PI 通过上面这些内容可能很难去了解这该如何使用,其实#define在我们的编码过程中也是很少去使用的,我们继续往下看。 其实对于预处理器,在我们调试以及运行时的作用是比较大的,比如说对某些代码限制编译,另一方变其实还可以对代码进行环境或者版本的控制,这些都是Ok的,最后我们结合着控制语句#if来看一下: …

.NET MSBuild

探索.NET平台中的SIMD内在函数Vector

概述 Vector(向量)是一种序列式容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而Vector刚好弥补了这个缺陷,它的特征是相当于可分配拓展的数组(动态数组),它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。 什么是SIMD? SIMD是Single Instruction Multiple Data的缩写,通常中文译为单指令多数据流,通俗来讲的话是:对多个数据执行同一个CPU指令,以达到平行运算的目的. 在GPU之前我们会通过CPU来运行该项技术来增加图片的运算速度,例如Intel的MMX、SSE、SSE2、AVX,AMD的3DNow!等等,都是来使用SIMD 为基础的概念,在GPU技术突飞猛进的今天,CPU的SIMD技术很少用在了图片运算方面了,更多的是在资料库或者其他用途上。 SIMD 它适用于机器 …

.NET .NET5

.NET必知的EventCounters性能指标监视器

在.NET我们对于性能指标监控,其实常见的有两个方法,一个是CLI工具dotnet-counters而另一个是代码级别的EventListener. 使用dotnet-counters dotnet-counters是一个性能指标监视工具,用于临时运行状态监视和初级性能调查。它可以观察通过 EventCounter API发布的性能计数器值。例如,可以快速监视 CPU 使用情况或 .NET Core 应用程序中引发的异常率,以了解在使用 PerfView 或 dotnet-trace 深入调查更严重的性能问题之前是否有任何可疑操作。 -- 摘自 dotnet-counters 命令 dotnet-counters collect dotnet-counters list dotnet-counters monitor dotnet-counters ps 安装dotnet- …

.NET Core .NET .NET5

【Azure DevOps系列】Azure DevOps使用Docker将.NET应用程序部署在云服务器

Docker持续集成 本章我们要实现的是通过我们往代码仓库push代码后,我们将每次的push进行一次docker自动化打包发布到docker hub中,发布到之后我将进行部署环节,我们将通过ssh方式将我们的.NET应用程序pull并run到我们的云服务器上。 Dockerfile 如下所示: #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr. …

ASP.NET Core Azure DevOps Docker

在.NET中使用DiagnosticSource

前言 DiagnosticSource是一个非常有意思的且非常有用的API,对于这些API它们允许不同的库发送命名事件,并且它们也允许应用程序订阅这些事件并处理它们,它使我们的消费者可以在运行时动态发现数据源并且订阅与其相关的数据源。 DiagnosticSource在AspNetCore、EntityFrameworkCore、HttpClient、SqlClient中被使用,在我们实际的开发过程中他使我们能够进行拦截请求与响应的http请求、数据库查询、对HttpContext、DbConnection、DbCommand、HttpRequestMessageand等对象的访问,甚至说在需要的时候我们可以进行修改这些对象来处理我们的业务。 下面我们将通过如下的简单示例来了解它. DiagnosticSource和EventSource区别 DiagnosticSource和 …

.NET .NET5 Logging

.NET Core开源导入导出库 Magicodes.IE 2.3发布

在2.3这一版本的更新中,我们迎来了众多的使用者、贡献者,在这个里程碑中我们也添加并修复了一些功能。对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提issues或者PR,您的一个issue或者PR将是我们前进的动力。 file 公式导出 #88 公式导出目前已经在Excel模板导出中支持,我们可以通过如上代码片段的格式进行将公式应用到我们的Excel导出模板中. {{Formula::AVERAGE?params=G4:G6}} {{Formula::SUM?params=G4:G6G4}} 增加分栏、分sheet、追加rows导出 #74 在该版本中我们支持使用链式编程导出我们的Excel,从而起到追加分栏等作用。 在多个DTO导出中我们可以通过如下代码片段将我们的Excel分栏导出 exporter.Append(list1). …

.NET

【Azure DevOps系列】Azure DevOps构建并发布Nuget程序包

在Azure DevOps中,管道可以用来构建解决方案,O(∩_∩)O哈哈~快万能了,本章主要介绍如何创建Nuget包并且将其发布到Nuget服务器的过程。 file 前面我创建了一个非常简单的类库,这边我不做过多叙述,接下来我们需要进行编辑csproj文件,当我们创建Nuget包时,我们将使用dotnet pack命令。这于传统的Nuget cli稍微有点不同,在传统的Nuget CLI中,我们创建nuspec文件并针对nuspec运行nuget pack。dotnet pack命令将从csproj创建一个nuspec文件,然后将代码打包到一个nupkg文件中,需要将一些关键信息添加到csproj文件中,以确保它可以正确的创建Nuget包。首先我们需要一个PackageId,这将是Nuget包本身的名称,根据我们要发布的位置这个名称必须是唯一的,接下来是Version,它将是已发布的软件 …

.NET Core Azure DevOps NuGet

【Azure DevOps系列】开始第一个Azure DevOps应用

前言 在上一章中对Azure DevOps做了一个简单介绍,本章我们将开始我们的Azure DevOps. file 开启第一个DevOps应用 我们需要先从Azure DevOps这边进行注册相关账号。 注册账号打开Azure Pipelines,点击免费使用 azure pipelines 点击后进行注册或者登录Microsoft账号 创建项目 根据我们刚才创建的组织,然后访问组织页面进行创建项目 https://dev.azure.com/{yourorganization} 输入项目名称、输入项目描述以及选择项目可见程度即可 create project 创建完后我们会被重定向到如下页面 image 点击GitHub,点击后对Github仓库做一下授权即可,然后选择项目 进行选择一个默认模板配置,下面我选择ASP.NET Core image 点击后能看到为我们默认创建的YAML文 …

ASP.NET Core Azure DevOps