HueiFeng

Microsoft MVP

All Posts


.NET探索平台条件编译

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

.NET MSBuild

【Azure DevOps系列】Azure DevOps EFCore命令式脚本部署到SQL数据库

构建迁移脚本 为了构建迁移脚本,我们将需要使用EF Tools for Command Line Interface。这些工具在Microsoft.EntityFrameworkCore.Tools提供。 迁移脚本 现在我们将通过 dotnet ef migrations script –p path to your csproj with migrations -o $(Build.ArtifactStagingDirectory)\migrations\scripts.sql –i来迁移我们的脚本,在如下代码片段中我将脚本进行迁移出来并且输出到指定的路径 -o $(Build.ArtifactStagingDirectory)/migrations/scripts.sql中, -i代表生成可用于任何迁移的数据库的脚本。 - task: CmdLine@2 …

Azure DevOps

探索.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

Vs编译时RazorTagHelper - DOTNET_HOST_PATH is not set

今天听朋友说遇到一个问题,打开一个aspnetcore2.2的项目工程,发现挺有意思,缺少环境变量DOTNET_HOST_PATH file 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB4018 “RazorTagHelper”任务意外失败。 System.InvalidOperationException: DOTNET_HOST_PATH is not set 在 Microsoft.AspNetCore.Razor.Tasks.DotNetToolTask.get_DotNetPath() 在 Microsoft.AspNetCore.Razor.Tasks.DotNetToolTask.GenerateFullPathToTool() 在 Microsoft.Build.Utilities.ToolTask.ComputePathToTool() …

.NET Core

.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 Storage Account 误删恢复

登陆Azure站点,导航到新支持请求工作流程中 file 新建一个支持请求,信息可以按照如下这么去设置,当然要注意订阅账号别选择错 file 点击图中圈起来的链接“恢复删除的存储帐户” file 请选择已删除的帐户, 并且单击恢复。 file 恢复完成后,我们会看到一个通知success~,恢复成功 file

Azure

【Azure DevOps系列】Azure DevOps多阶段构建

对于阶段的流水线其实是特别有用的,我们可以将构建、测试、或者说部署分为多个阶段进行处理。将您的应用程序部署到多个环境中,并从一个环境逐步过渡到另一个环境。例如,可以在CI中运行单元测试后自动部署到Dev环境,然后部署到运行集成测试的Test环境,然后手动部署到Production。 管道任务 这是一个最基础的管道任务,它在Microsoft托管代理上运行,同时他它采用ubuntu-16.04虚拟机镜像,执行后将会输出Hello world pool: vmImage: 'ubuntu-16.04' steps: - bash: echo Hello world 当然我们可以对此进行修改成如下方式: jobs: - job: myJob timeoutInMinutes: 10 pool: vmImage: 'ubuntu-16.04' steps: - …

ASP.NET Core Azure DevOps

【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

【Azure DevOps系列】如何在Azure DevOps上构建Docker镜像(一)

创建Pipeline trigger: - master pool: vmImage: 'windows-latest' steps: - task: DotNetCoreCLI@2 inputs: command: 'restore' - task: DotNetCoreCLI@2 inputs: command: 'build' - task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true 通过如下任务从源文件夹存档文件,支持多种标准存档格式,包括.zip,.jar,.war,.ear,.tar,.7z等 - task: ArchiveFiles@2 inputs: rootFolderOrFile: '$(Build. …

Azure DevOps Docker

在.NET中使用DiagnosticSource

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

.NET .NET5 Logging