A 项目中含有中文字符串目录路径,导致使用 Jenkins 时调用 Powershell 编译报错。 无论是设置环境变量还是使用 chcp 命令等,均无效。 这是因为默认 csproj 是使用 utf8-bom 保存的。 这样的特性会导致在本地电脑开发环境中正常,但是在服务器中编译就会报错。 需要改成正经的 utf8 编码重新保存文件才行。 [......] 继续阅读

2023年11月23日 0条评论 1262点热度 0人点赞 痴者工良 阅读全文

MainWindow 窗口使用 Blazor WebView2: <Border Margin="0,0,0,0" Background="Transparent" BorderThickness="0" CornerRadius="0,0,0,0"> <Grid> <blazor:BlazorWebView x:Name="webView" HostPage="{Bindi[......]继续阅读

2023年11月22日 0条评论 1044点热度 0人点赞 痴者工良 阅读全文

先引入 PInvoke.net 或 Microsoft.Windows.CsWin32,请参考: https://www.whuanle.cn/archives/21436 定义两个获取屏幕去掉任务栏的长宽高函数: public static int GetSystemMetrics_SM_CYMAXIMIZED() { return PInvoke.GetSystemMetrics(Windows.Win32.UI.WindowsAndMessaging.SYSTEM_METRICS_INDEX.SM_CYMAX…

2023年11月22日 0条评论 578点热度 0人点赞 痴者工良 阅读全文

PInvoke.net 是官方用于操作 Win32 API 的库,但是已经归档了。也就是后续需要使用 Microsoft.Windows.CsWin32 来操作 win32 API。 但是 Microsoft.Windows.CsWin32 比较麻烦,因为 Microsoft.Windows.CsWin32 使用的是 Rolsyn 技术动态生成代码,并且只能针对当前项目。当然,优点是动态生成部分代码合并到项目中,项目打包发布的时候,不需要依赖 Microsoft.Windows.CsWin32 包了,体积会小一些。…

2023年11月22日 2条评论 1154点热度 0人点赞 痴者工良 阅读全文

如图: 有两种配置形式。 一种是在项目中(可以启动的项目,类库不行)配置模板文件,另一种是在项目编译之后配置。 第一种方法在项目中新建一个 runtimeconfig.template.json 文件。 示例如下: { "runtimeOptions": { "configProperties": { "System.GC.ConserveMemory": 9 } } } 另一种是项目编译之后,项目下面会有个 {项目名称}.runtimeconfig.json 文件。手动修改即可。 [......] 继续阅读

2023年11月22日 0条评论 662点热度 0人点赞 痴者工良 阅读全文

新建一个项目,项目只能使用 netstandard2。 其 csproj 文件完整内容如下: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> <EnforceExtendedAn…

2023年11月21日 0条评论 528点热度 0人点赞 痴者工良 阅读全文

您大可以相信工良出品。本文从 C# 角度开始一点点编码,逐步了解 RabbitMQ 编程的各种细节,学会消息处理机制和多种场景下的开发细节。虽然文章比较长,但是不会啰啰嗦嗦说一堆理论。

2023年11月16日 0条评论 1145点热度 2人点赞 痴者工良 阅读全文

折腾了好一段时间,office 365、outlook 等的授权验证方式过于麻烦,因此记录开发步骤。 大概开发过程如下: 1,去注册 Azure 账号,然后进行应用注册。 2,租户邀请该用户加入组织中。 3,使用应用通过 OAuth 2.0 链接,获取用户的授权。 4,获取用户的 access_token 访问用户信息、替用户发送邮件等。 但是这些过程并不是一帆风顺,有很多曲折。比如不能跨租户访问等,必须先邀请用户加入组织。 否则会报错: AADSTS50020: User account 'xxx@xxx.onm…

2023年11月7日 0条评论 1476点热度 0人点赞 痴者工良 阅读全文

包 CommunityToolkit.Mvvm 主要用于代码生成,能够为用户减少编写大量的代码,在 WPF 中可以实现 MVVM 设计模式,降低代码复杂度。 引入项目包: <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.1 "/> 要学习 MVVM,需要关注以下类型: CommunityToolkit.Mvvm.ComponentModel ObservableObject ObservableRecipient Observ…

2023年11月2日 0条评论 1152点热度 0人点赞 痴者工良 阅读全文

Spire.pdf 等打印 pdf 的库需要付费,因此本篇文章是通过使用 Google 开源的 PDFium 项目实现打印, PDFium 项目开源且跨平台。 bblanchon.PDFium.Win32 则是一个使用 C# 封装了 PDFium 的库。 引入三个库: <ItemGroup> <PackageReference Include="bblanchon.PDFium.Win32" Version="122.0.6259" /> <PackageReference Inclu…

2023年10月25日 3条评论 1736点热度 0人点赞 痴者工良 阅读全文

图片转换需要安装:https://ghostscript.com/ 引入: <ItemGroup> <PackageReference Include="Magick.NET-Q16-AnyCPU" Version="13.4.0" /> <PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="2.3.2" /> </ItemGroup> 定义转换配置: public class…

2023年10月25日 0条评论 951点热度 0人点赞 痴者工良 阅读全文

自家的软件安装后,需要更新,更新文件完成后还需要修改注册表中关于程序的版本号。 软件安装后,会被写入注册表中。 所以只需要修改注册表的 DisplayVersion 即可,不同的程序可能还需要修改其它属性,例如 Version、DisplayName。 修改注册表可能需要管理员权限,这要看软件是安装到所有人可以使用,还是仅当前用户可以使用。 每个程序的 KEY 都是不同的,需要自行拼接。 static void Main(string[] args) { string code = "4444-4444-4444-…

2023年10月23日 0条评论 732点热度 0人点赞 痴者工良 阅读全文

示例代码如下: var oldPdf = PdfReader.Open("测试.pdf"); foreach (var oldPage in oldPdf.Pages) { // 插入一个页面 PdfPage newPage = newPdf.AddPage(); // 查询元素 PdfDictionary? resources = oldPage.Elements.GetDictionary([......]继续阅读

2023年10月18日 0条评论 709点热度 0人点赞 痴者工良 阅读全文

源文件是 PDF 全元素,也就是各种点线、文字、表格组成,需要将内容全部转成图片形式存储到 pdf 中。 引入: <ItemGroup> <PackageReference Include="FreeSpire.PDF" Version="8.6.0" /> <PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="2.3.2" /> </ItemGroup> internal c…

2023年10月18日 0条评论 946点热度 0人点赞 痴者工良 阅读全文

ImageMagick 是一个强大的图像处理库,支持100多种主要的文件格式(不包括子格式)。使用 Magick.NET,你可以在 c #/vb.net/. net Core 应用程序中使用 ImageMagick,而无需在服务器或桌面上安装 ImageMagick。 项目地址:https://github.com/dlemstra/Magick.NET 笔者推荐的原因除了其跨平台、开源,还要我其 API 简单好用。 nuget 搜索 ImageMagick 即可引用。 using ImageMagick; usi…

2023年10月17日 0条评论 823点热度 0人点赞 痴者工良 阅读全文

Maomi.Mapper 项目地址:https://github.com/whuanle/Maomi.Mapper 注:本项目用于教学目的,性能较差,请勿用于生产环境。 MaomiMapper 是一个使用表达式树构造生成对象成员映射的框架,即对象映射框架。 虽然 MaomiMapper 性能不啥样,但是代码注释也写得很齐全,适合读者研究反射、表达式树、类型转换等代码。 MaomiMapper 与 AutoMapper 对比: Method Mean Error StdDev Gen0 Allocated ASAut…

2023年10月15日 0条评论 698点热度 0人点赞 痴者工良 阅读全文

System.IO.Compression 是官方发布的一个由于解压缩的工具包,默认使用 utf8 编码解压缩文件。 但是在 Windows 上,编码比较混乱,如果文件或目录是中文名称,那么解压后会出现乱码,即使压缩包都是 UTF8 编码,.NET 解压也会出现乱码问题,所以需要使用 GB2312 编码解压。 但是 .NET 中默认是不包含 GB2312 编码的。 笔者说的不一定对,可能跟压缩文件也有关,总之, .NET 默认不支持 GB2312 编码,导致解压后中文文件名称乱码。 首先引入 System.Text…

2023年10月12日 0条评论 1014点热度 0人点赞 痴者工良 阅读全文

C# 编写 SignalR 客户端时需要手动注入客户端方法: connection.On<string, string>("ReceiveMessage", (user, message) => { this.Dispatcher.Invoke(() => { var newMessage = $"{user}: {message}"; messagesList.Items.Add(n[......]继续阅读

2023年9月25日 1条评论 838点热度 3人点赞 痴者工良 阅读全文

研究了很久源码,发现了其运行机制。 如果 BlazorWebView 跳转的页面不是 https://0.0.0.0 ,那么就会使用客户端之外的浏览器打开页面。 // 这里的地址允许在浏览器中打开 public static readonly Uri[] URLS = new Uri[] { new Uri("https://open.feishu.cn") }; this.webView.BlazorWebViewInitializing += (s, e) =>[......]继续阅读

2023年9月21日 0条评论 910点热度 0人点赞 痴者工良 阅读全文

模型类: public class Test { [JsonConverter(typeof(string))] public int Value { get; set; } } API 接口: [HttpPost("aaa")] public string AAA([FromBody] Test test) { return "11111111111"; } 但是 Swagger 还是显示 int 类型,没有跟着 json 配置而变化。 所以我们需要[......] 继续阅读

2023年9月19日 0条评论 749点热度 0人点赞 痴者工良 阅读全文
1234526