razor 页面字段属性命名规则 组件被调用 一个组件如果允许外部传递参数,需要使用 [Parameter] 修饰属性和大写命名。 <div class="card" style="width:22rem"> <div class="card-body"> <h3 class="card-title">@Title</h3> <p class="card-text">@ChildContent</p> </div> </div…
razor 页面字段属性命名规则 组件被调用 一个组件如果允许外部传递参数,需要使用 [Parameter] 修饰属性和大写命名。 <div class="card" style="width:22rem"> <div class="card-body"> <h3 class="card-title">@Title</h3> <p class="card-text">@ChildContent</p> </div> </div…
MAUI Blazor 在 Windows 上使用的是 WebView2,MAUI Blazor 运行环境是跟程序没关系的,即使是系统设置了中文语言,程序集设置了中文,本地文化设置了中文,CultureInfo 设置了中文,统统都没有用。 你可以在程序启动后,按下 F12,然后执行 JavaScript 代码,检查浏览器的运行环境是何种语言: navigator.language 'en-US' 或者使用 API: // using Windows.Globalization var langs = Applica…
修复系统缺少组件等问题: DISM.exe /Online /Cleanup-image /Scanhealth DISM.exe /Online /Cleanup-image /Checkhealth DISM.exe /Online /Cleanup-image /Restorehealth sfc /scannow [......] 继续阅读
原作者:Joydip Kanjilal 原文地址:https://www.codemag.com/Article/2207031/Writing-High-Performance-Code-Using-SpanT-and-MemoryT-in-C 本文采用半译方式。 在本文中,将会介绍 C# 7.2 中引入的新类型:Span 和 Memory,文章深入研究 Span<T> 和 Memory<T> ,并演示如何在 C# 中使用它们。 本文所有代码用例在 .NET 6.0 下运行。 .NET 中…
在 Mysql 中,批量插入自增列,是不能批量返回自增后的 Id,为了解决批量插入的问题,利用 Redis 的原子操作,实现无锁原子分配 自增 Id。 核心是在 Redis 中,保存表的最大 Id。 每次插入前,检查缓存 CacheId 跟数据库 MaxId 相比,如果 CacheId > MaxId,说明 CacheId 可以使用。这个阶段需要保证原子性。 插入前,需要向 Redis 申请获取一个范围的 Id,然后插入到数据库中。 定义接口: /// <summary> /// 自增列批量插入服…
如下面代码: [ThreadStatic] private bool HasCreated = false; [ThreadStatic] private int Value = 0; void Main() { ThreadLocal<string> a = new ThreadLocal<string>(() => { if (HasCreated) return Value.ToString(); else { Value = Thread.CurrentThread.[....…
Docker 部署: docker run -d \ --name=calibre-web \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -e DOCKER_MODS=linuxserver/mods:universal-calibre <code>#optional</code> \ -e OAUTHLIB_RELAX_TOKEN_SCOPE=1 <code>#optional</code> \ -p 8…
执行 fdisk -l 会发现需要的磁盘。 可以看到这是一个空白盘。 开始执行命令将空白磁盘创建分区。 fdisk /dev/sdc 先输入 n。 ommand action <- 选择要创建的分区类型 e extended <- 扩展分区 p primary partition (1-4) <- 主分区 输入 p,再输入 1,剩下选项直接回车。 输入 w ,保存并退出。 格式化并设置磁盘系统: mkfs.ext4 /dev/sdc1 挂载 mount /dev/sdc1 /data/ 查看磁盘挂…
在不使用 ASP.NET Core 时,也不使用 FluentValidation 这里框架,通过原生的 API 实现模型验证。 public class A { [EmailAddress] public string B { get; set; } } void Main() { var result = new List<ValidationResult>(); var a = new A { B = "aa.com" }; var validationContext = new Validati…
定义转换器: public class EnumStringConverter : JsonConverter<Enum> { public override bool CanConvert(Type objectType) { return objectType.IsEnum; } public override Enum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var v…
在 .NET 官方的 Docker 镜像中,添加自定义工具链: FROM mcr.microsoft.com/dotnet/sdk:5.0 RUN apt-get update \ && apt-get install -y --no-install-recommends \ ssh-client \ && rm -rf /var/lib/apt/lists/* 在 Docker 容器中使用 Docker 命令: -u root -v /var/run/docker.sock:/va…
public async Task ExecuteAsync(HttpContext context) { Context = context; Request = Context.Request; Response = Context.Response; var buffer = new MemoryStream(); Output = new StreamWriter(buffer, UTF8NoBOM, 4096, leaveOpen:[......]继续阅读
private static readonly Encoding UTF8NoBOM = new UTF8Encoding( encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true); [......] 继续阅读
整体格式 大体格式定义 pipeline { // 全局环境变量 // environment { // IMAGENAME = 'webdemo' // 镜像名称 // } // Jenkins 上可以看到的参数 // parameters{ // string(name: 'REPO_NAME' ,defaultValue:'',description:'仓库名称',trim:true) // } agent { // 如何启动构建环境,Linux、Window[......]继续阅读
public class TestNoopHostLifetime : IHostLifetime { public Task StopAsync(CancellationToken cancellationToken) { Console.WriteLine("程序停止"); return Task.CompletedTask; } public Task WaitForStartAsync(CancellationToken cancellationToken)[......]继续阅读
public async static Task (this IApplicationBuilder app) { app.ApplicationServices.GetRequiredService<ObjectAccessor<IApplicationBuilder>>() } { public interface IApplicationBuilder { IFeatureCollection ServerFeatures { get; } IDictionary<string,…
处理 Stream 的一些用法。 public static byte[] GetAllBytes(this Stream stream) { using (var memoryStream = new MemoryStream()) { if (stream.CanSeek) { stream.Position = 0; } stream.CopyTo(memoryStream); return[......]继续阅读
1, IServiceCollection 可以被替换服务。 ServiceDescriptor 可以通过 .Scoped() 等生成要注入的自定义服务。 public static IServiceCollection AddAbpDynamicOptions<TOptions, TManager>(this IServiceCollection services) where TOptions : class where TManager : AbpDynamicOptionsManager<…