<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>大猫工具箱</title><link>https://blog.dm98.vip/</link><description>构建AI自动化网络营销推广</description><item><title>各大模型APIkey管理</title><link>https://blog.dm98.vip/post/16.html</link><description>&lt;p&gt;腾讯云&lt;br&gt;&lt;a href=&quot;https://cloud.tencent.com/document/product/1729/111008&quot;&gt;https://cloud.tencent.com/document/product/1729/111008&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Tue, 14 Apr 2026 09:15:48 +0800</pubDate></item><item><title>搜得到，才卖得掉：工业品关键词的生存法则</title><link>https://blog.dm98.vip/post/15.html</link><description>&lt;h1 id=&quot;h1--&quot;&gt;&lt;a name=&quot;搜得到，才卖得掉：工业品关键词的生存法则&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;搜得到，才卖得掉：工业品关键词的生存法则&lt;/h1&gt;&lt;p&gt;工业品在网上找客户，其实就两条路。&lt;/p&gt;
&lt;p&gt;第一条，信息流。&lt;/p&gt;
&lt;p&gt;你刷短视频，本来想看点轻松内容，结果平台给你推了个“高温阀门”。&lt;br&gt;你看完也没买，但至少知道：原来还有这种产品存在。&lt;/p&gt;
&lt;p&gt;这类流量的作用，是让客户“知道你”。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;第二条，主动搜索。&lt;/p&gt;
&lt;p&gt;客户那边已经很着急了——设备出问题、生产受影响、老板在催。&lt;br&gt;他打开搜索，输入：&lt;/p&gt;
&lt;p&gt;“耐腐蚀离心泵厂家”&lt;/p&gt;
&lt;p&gt;这种行为不是浏览，而是带着明确需求来的。&lt;/p&gt;
&lt;p&gt;这类流量的本质，是“找解决方案”。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;所以问题就很直接：&lt;/p&gt;
&lt;p&gt;你是想出现在客户“顺便看看”的列表里，&lt;br&gt;还是出现在他“必须解决问题”的搜索结果里？&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;很多人把精力都放在推广和投放上，但对于工业品来说，有一条更稳定的路径：&lt;/p&gt;
&lt;p&gt;不要追着客户跑，而是让客户主动找到你。&lt;/p&gt;
&lt;p&gt;关键词，就是这条路径的核心。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;有人会问：现在AI这么强，用户是不是不再依赖搜索了？&lt;/p&gt;
&lt;p&gt;其实并不是。&lt;/p&gt;
&lt;p&gt;当用户向AI提问时，本质上仍然是在输入关键词，比如：&lt;/p&gt;
&lt;p&gt;“不容易漏油的液压油缸厂家”&lt;/p&gt;
&lt;p&gt;这里的“液压油缸”“不漏油”“厂家”，依然是关键词。&lt;/p&gt;
&lt;p&gt;AI只是改变了入口，并没有改变底层逻辑。&lt;br&gt;如果内容中没有这些信息，依然无法被匹配和推荐。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;常见的关键词，大致可以分为四类：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 产品词&lt;/strong&gt;&lt;br&gt;例如：“316L不锈钢法兰”&lt;br&gt;这类词直接对应产品，转化意图强，但竞争也最激烈。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 厂家词&lt;/strong&gt;&lt;br&gt;例如：“耐高温硅胶管生产厂家”&lt;br&gt;带有明显采购意图，属于高价值关键词。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 问题词&lt;/strong&gt;&lt;br&gt;例如：“液压油缸为什么漏油”&lt;br&gt;用户还在寻找原因和解决方案，是建立信任的切入口。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. 长尾词&lt;/strong&gt;&lt;br&gt;例如：“化工厂用耐酸碱卧式离心泵推荐”&lt;br&gt;搜索量不大，但非常精准，竞争也较小。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;大多数人看到这里，会认同关键词的重要性。&lt;/p&gt;
&lt;p&gt;但现实问题是：&lt;/p&gt;
&lt;p&gt;知道归知道，做不动。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;常见的情况包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想写内容，但不知道写什么  &lt;/li&gt;&lt;li&gt;知道关键词，但不会布局  &lt;/li&gt;&lt;li&gt;想覆盖更多搜索词，但精力有限  &lt;/li&gt;&lt;li&gt;想持续更新，但难以坚持  &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;最终结果往往是：&lt;/p&gt;
&lt;p&gt;网站长期不更新&lt;br&gt;内容缺乏针对性&lt;br&gt;关键词覆盖不足&lt;br&gt;几乎没有来自搜索的询盘  &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;关键词的关键，不只是理解，而是执行能力。&lt;/p&gt;
&lt;p&gt;你是否有能力持续产出内容、覆盖不同搜索词、占据更多搜索入口，这才是核心差距。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;从结果来看，可以把两种流量方式总结为：&lt;/p&gt;
&lt;p&gt;信息流，让客户“记住你”&lt;br&gt;搜索流，让客户“找到你”  &lt;/p&gt;
&lt;p&gt;而在工业品领域，后者往往更直接，也更稳定。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;接下来更关键的问题是：&lt;/p&gt;
&lt;p&gt;如何系统地挖掘关键词？&lt;br&gt;如何规划关键词结构？&lt;br&gt;如何批量生成内容并持续覆盖？&lt;br&gt;如何从零搭建起稳定的搜索流量来源？&lt;/p&gt;
&lt;p&gt;这些才是真正影响结果的部分。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;后续内容中，本站会逐步拆解整个流程，从关键词挖掘、内容生成，到网站结构和流量获取，完整讲清主动搜索流量的实现路径。&lt;/p&gt;
&lt;p&gt;如果你正在做工业品推广，或者希望通过搜索获取客户，可以持续关注后续更新。&lt;/p&gt;
</description><pubDate>Sat, 11 Apr 2026 14:39:02 +0800</pubDate></item><item><title>本站工具集中下载地址</title><link>https://blog.dm98.vip/post/14.html</link><description>&lt;p&gt;&lt;strong&gt;爱采购助手&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;爱采购五星商品上传工具&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下载地址：&lt;a href=&quot;https://dm98.lanzout.com/ikoRJ3mzatej&quot;&gt;https://dm98.lanzout.com/ikoRJ3mzatej&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;思源黑体&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本站视频工具常用的字体，免费可商用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下载地址：&lt;a href=&quot;https://dm98.lanzout.com/iEhBo3mzayej&quot;&gt;https://dm98.lanzout.com/iEhBo3mzayej&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;FFmpeg&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;猫剪等视频剪辑工具依赖的库&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下载地址：&lt;a href=&quot;https://dm98.lanzout.com/ijcvy3mzbvtc&quot;&gt;https://dm98.lanzout.com/ijcvy3mzbvtc&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Sat, 11 Apr 2026 09:58:41 +0800</pubDate></item><item><title>DMTTS使用方法</title><link>https://blog.dm98.vip/post/13.html</link><description>&lt;pre&gt;&lt;code&gt;using System;
using System.IO;
using dm98;

class Program
{
    static void Main()
    {
        // 可选：更换语音
        DmTTS.DefaultVoiceName = &amp;quot;Xiaoxiao&amp;quot;;

        string text = &amp;quot;大家好，欢迎使用 Edge TTS 语音合成。&amp;quot;;

        // 1. 直接播放
        Console.WriteLine(&amp;quot;播放中...&amp;quot;);
        DmTTS.Speak(text);

        // 2. 保存 MP3 文件
        string savedFile = DmTTS.Save(text);
        Console.WriteLine($&amp;quot;已保存到：{savedFile}&amp;quot;);

        // 3. 获取 MP3 字节并保存
        byte[] mp3Bytes = DmTTS.GetAudio(text);
        File.WriteAllBytes(&amp;quot;output.mp3&amp;quot;, mp3Bytes);
        Console.WriteLine(&amp;quot;已保存 output.mp3&amp;quot;);

        // 4. 获取 WAV 字节并保存
        byte[] wavBytes = DmTTS.GetAudio(text, format: OutputFormat.WAV);
        File.WriteAllBytes(&amp;quot;output.wav&amp;quot;, wavBytes);
        Console.WriteLine(&amp;quot;已保存 output.wav&amp;quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Mon, 30 Mar 2026 18:59:36 +0800</pubDate></item><item><title>python安装和设置清华源</title><link>https://blog.dm98.vip/post/12.html</link><description>&lt;p&gt;清华下载源&lt;br&gt;&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/python/&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/python/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;windows下载64位&lt;/p&gt;
&lt;p&gt;3.11(一般下载这个版本)&lt;br&gt;&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/python/3.11.9/python-3.11.9-amd64.exe&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/python/3.11.9/python-3.11.9-amd64.exe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.14（最新版）&lt;br&gt;&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/python/3.14.3/python-3.14.3-amd64.exe&quot;&gt;https://mirrors.tuna.tsinghua.edu.cn/python/3.14.3/python-3.14.3-amd64.exe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;设置清华镜像源&lt;br&gt;pip config set global.index-url &lt;a href=&quot;https://pypi.tuna.tsinghua.edu.cn/simple&quot;&gt;https://pypi.tuna.tsinghua.edu.cn/simple&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;验证&lt;br&gt;pip config list&lt;/p&gt;
</description><pubDate>Mon, 30 Mar 2026 11:07:16 +0800</pubDate></item><item><title>Edge_tts_sharp 保存速度慢的问题</title><link>https://blog.dm98.vip/post/11.html</link><description>&lt;p&gt;&lt;img src=&quot;https://blog.dm98.vip/zb_users/upload/2026/03/202603292324082838067.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;折腾了很久，在CSDN上看到了解决方法&lt;br&gt;代码需要修改下&lt;br&gt;Edge_tts.cs&lt;/p&gt;
</description><pubDate>Sun, 29 Mar 2026 23:20:26 +0800</pubDate></item><item><title>.NET8 WinForm AutoUpdater.NET 自动更新笔记</title><link>https://blog.dm98.vip/post/10.html</link><description>&lt;h1 id=&quot;h1--net8-winform-autoupdater-net-&quot;&gt;&lt;a name=&quot;.NET8 WinForm AutoUpdater.NET 自动更新笔记&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;.NET8 WinForm AutoUpdater.NET 自动更新笔记&lt;/h1&gt;&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;一、核心说明&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、核心说明&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;使用 NuGet 包：&lt;strong&gt;Autoupdater.NET.Official&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;对比规则：XML 中的 &lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt; 只与项目 &lt;strong&gt;程序集版本&lt;/strong&gt; 对比，文件版本无需管&lt;/li&gt;&lt;li&gt;原理：自动下载 → 独立进程替换 → 自动重启，不会文件占用&lt;/li&gt;&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;二、项目配置（去除多余语言文件夹）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、项目配置（去除多余语言文件夹）&lt;/h2&gt;&lt;p&gt;编辑 &lt;code&gt;.csproj&lt;/code&gt; 文件，在 &lt;code&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/code&gt; 中添加：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- 仅保留英文，无多余语言文件夹 --&amp;gt;
&amp;lt;SatelliteResourceLanguages&amp;gt;en&amp;lt;/SatelliteResourceLanguages&amp;gt;

&amp;lt;!-- 如需仅中文：zh-Hans --&amp;gt;
&amp;lt;!-- &amp;lt;SatelliteResourceLanguages&amp;gt;zh-Hans&amp;lt;/SatelliteResourceLanguages&amp;gt; --&amp;gt;

&amp;lt;!-- 完全不要语言文件夹：none --&amp;gt;
&amp;lt;!-- &amp;lt;SatelliteResourceLanguages&amp;gt;none&amp;lt;/SatelliteResourceLanguages&amp;gt; --&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;三、代码调用&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;三、代码调用&lt;/h2&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using AutoUpdaterDotNET;

private void Form1_Load(object sender, EventArgs e)
{
    // 启动更新检查
    AutoUpdater.Start(&amp;quot;http://你的地址/update.xml&amp;quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--update-xml-&quot;&gt;&lt;a name=&quot;四、update.xml 标准格式&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;四、update.xml 标准格式&lt;/h2&gt;&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;item&amp;gt;
  &amp;lt;version&amp;gt;2.0.0.0&amp;lt;/version&amp;gt;       &amp;lt;!-- 新版本号，必须大于本地程序集版本 --&amp;gt;
  &amp;lt;url&amp;gt;http://你的地址/Update.zip&amp;lt;/url&amp;gt;
  &amp;lt;changelog&amp;gt;1.修复BUG
2.优化界面
3.新增功能&amp;lt;/changelog&amp;gt;
  &amp;lt;mandatory&amp;gt;false&amp;lt;/mandatory&amp;gt;     &amp;lt;!-- 是否强制更新 --&amp;gt;
&amp;lt;/item&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--zip-&quot;&gt;&lt;a name=&quot;五、更新包 ZIP 打包规则（最关键）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;五、更新包 ZIP 打包规则（最关键）&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;进入发布目录&lt;/strong&gt;：&lt;code&gt;bin\Release\net8.0-windows&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;直接全选里面所有文件&lt;/strong&gt;（exe、dll、config 等）&lt;/li&gt;&lt;li&gt;右键压缩为 ZIP，&lt;strong&gt;不要套文件夹&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;压缩包内结构必须是：&lt;pre&gt;&lt;code&gt;Update.zip
 ├ xxx.exe
 ├ xxx.dll
 ├ xxx.deps.json
 └ ...&lt;/code&gt;&lt;/pre&gt;❌ 禁止：压缩外层文件夹，导致包内多一层目录&lt;/li&gt;&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;六、常见问题&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;六、常见问题&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;主程序 exe 不替换&lt;/strong&gt;&lt;br&gt;→ 99% 原因：ZIP 内多套了一层文件夹&lt;/li&gt;&lt;li&gt;&lt;strong&gt;出现大量语言文件夹&lt;/strong&gt;&lt;br&gt;→ 用 &lt;code&gt;SatelliteResourceLanguages&lt;/code&gt; 配置剔除&lt;/li&gt;&lt;li&gt;&lt;strong&gt;更新后版本不变&lt;/strong&gt;&lt;br&gt;→ 检查 XML 版本号 &amp;gt; 程序集版本&lt;/li&gt;&lt;li&gt;&lt;strong&gt;文件占用无法替换&lt;/strong&gt;&lt;br&gt;→ 该库自带独立更新程序，正常不会出现，出现则检查程序是否未正常退出&lt;/li&gt;&lt;/ol&gt;
</description><pubDate>Sun, 29 Mar 2026 12:35:57 +0800</pubDate></item><item><title>个人专属 .NET 8 通用工具库 — 开发使用文档</title><link>https://blog.dm98.vip/post/9.html</link><description>&lt;h1 id=&quot;h1-dm98-&quot;&gt;&lt;a name=&quot;dm98 工具库使用文档&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;dm98 工具库使用文档&lt;/h1&gt;&lt;h2 id=&quot;h2-1-&quot;&gt;&lt;a name=&quot;1. 概述&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 概述&lt;/h2&gt;&lt;p&gt;dm98 是一个基于 .NET 8 的综合性工具库，提供了多种常用功能模块，包括字符串处理、JSON 操作、文本处理、文件操作、加密操作、时间操作、数据校验、网络请求、翻译、语音合成和大模型调用等。&lt;/p&gt;
&lt;h2 id=&quot;h2-2-&quot;&gt;&lt;a name=&quot;2. 模块列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 模块列表&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模块名称&lt;/th&gt;
&lt;th&gt;主要功能&lt;/th&gt;
&lt;th&gt;文件位置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;DmString&lt;/td&gt;
&lt;td&gt;字符串扩展方法&lt;/td&gt;
&lt;td&gt;dm98/DmString.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmJson&lt;/td&gt;
&lt;td&gt;JSON 操作&lt;/td&gt;
&lt;td&gt;dm98/DmJson.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmText&lt;/td&gt;
&lt;td&gt;文本处理&lt;/td&gt;
&lt;td&gt;dm98/DmText.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmFile&lt;/td&gt;
&lt;td&gt;文件操作&lt;/td&gt;
&lt;td&gt;dm98/DmFile.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmCrypto&lt;/td&gt;
&lt;td&gt;加密操作&lt;/td&gt;
&lt;td&gt;dm98/DmCrypto.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmTime&lt;/td&gt;
&lt;td&gt;时间操作&lt;/td&gt;
&lt;td&gt;dm98/DmTime.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmValidate&lt;/td&gt;
&lt;td&gt;数据校验&lt;/td&gt;
&lt;td&gt;dm98/DmValidate.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmHttp&lt;/td&gt;
&lt;td&gt;网络请求&lt;/td&gt;
&lt;td&gt;dm98/DmHttp.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EdgeTranslator&lt;/td&gt;
&lt;td&gt;翻译功能&lt;/td&gt;
&lt;td&gt;dm98/DmTranslate.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmTTS&lt;/td&gt;
&lt;td&gt;语音合成&lt;/td&gt;
&lt;td&gt;dm98/DmTTS.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmAI&lt;/td&gt;
&lt;td&gt;大模型调用&lt;/td&gt;
&lt;td&gt;dm98/DmAI.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmConfig&lt;/td&gt;
&lt;td&gt;配置管理&lt;/td&gt;
&lt;td&gt;dm98/DmConfig.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DmDB&lt;/td&gt;
&lt;td&gt;数据库操作&lt;/td&gt;
&lt;td&gt;dm98/DmDB.cs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;h2-3-&quot;&gt;&lt;a name=&quot;3. 详细使用方法&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3. 详细使用方法&lt;/h2&gt;&lt;h3 id=&quot;h3-3-1-dmstring-&quot;&gt;&lt;a name=&quot;3.1 DmString 字符串扩展&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.1 DmString 字符串扩展&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IsEmpty()&lt;/code&gt;: 判断字符串是否为空/空白&lt;/li&gt;&lt;li&gt;&lt;code&gt;TrimAll()&lt;/code&gt;: 去除所有空格、换行、制表符&lt;/li&gt;&lt;li&gt;&lt;code&gt;Cut(int maxLength)&lt;/code&gt;: 截取指定长度，超出部分用…代替&lt;/li&gt;&lt;li&gt;&lt;code&gt;Between(string start, string end)&lt;/code&gt;: 提取两个字符串之间的内容&lt;/li&gt;&lt;li&gt;&lt;code&gt;Left(string end)&lt;/code&gt;: 提取从开始到指定字符串的内容&lt;/li&gt;&lt;li&gt;&lt;code&gt;Right(string start)&lt;/code&gt;: 提取从指定字符串到结束的内容&lt;/li&gt;&lt;li&gt;&lt;code&gt;LineCount()&lt;/code&gt;: 统计行数&lt;/li&gt;&lt;li&gt;&lt;code&gt;GetLine(int index)&lt;/code&gt;: 获取指定行的内容&lt;/li&gt;&lt;li&gt;&lt;code&gt;RemoveHtml()&lt;/code&gt;: 移除 HTML 标签&lt;/li&gt;&lt;li&gt;&lt;code&gt;ClearEmptyLines()&lt;/code&gt;: 清理空行&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

string text = &amp;quot;  Hello, World!\n\nThis is a test.  &amp;quot;;

// 判断是否为空
bool isEmpty = text.IsEmpty(); // false

// 去除所有空白
string trimmed = text.TrimAll(); // &amp;quot;Hello,World!Thisisatest.&amp;quot;

// 截取长度
string cut = text.Cut(10); // &amp;quot;  Hello, W...&amp;quot;

// 提取中间内容
string between = text.Between(&amp;quot;Hello, &amp;quot;, &amp;quot;!&amp;quot;); // &amp;quot;World&amp;quot;

// 统计行数
int lines = text.LineCount(); // 2

// 获取指定行
string line = text.GetLine(2); // &amp;quot;This is a test.  &amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-2-dmjson-json-&quot;&gt;&lt;a name=&quot;3.2 DmJson JSON 操作&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.2 DmJson JSON 操作&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Serialize(object obj)&lt;/code&gt;: 序列化对象为 JSON 字符串&lt;/li&gt;&lt;li&gt;&lt;code&gt;Deserialize&amp;lt;T&amp;gt;(string json)&lt;/code&gt;: 反序列化为指定类型&lt;/li&gt;&lt;li&gt;&lt;code&gt;Dynamic(string json)&lt;/code&gt;: 动态访问 JSON&lt;/li&gt;&lt;li&gt;&lt;code&gt;GetPath(string json, string path)&lt;/code&gt;: 根据路径获取值&lt;/li&gt;&lt;li&gt;&lt;code&gt;IsValid(string json)&lt;/code&gt;: 判断 JSON 是否有效&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 序列化
var obj = new { Name = &amp;quot;Test&amp;quot;, Age = 18 };
string json = DmJson.Serialize(obj); // {&amp;quot;Name&amp;quot;:&amp;quot;Test&amp;quot;,&amp;quot;Age&amp;quot;:18}

// 反序列化
var deserialized = DmJson.Deserialize&amp;lt;dynamic&amp;gt;(json);
string name = deserialized.Name; // &amp;quot;Test&amp;quot;

// 动态访问
dynamic dynamicJson = DmJson.Dynamic(json);
int age = dynamicJson.Age; // 18

// 根据路径获取值
string nameValue = DmJson.GetPath(json, &amp;quot;Name&amp;quot;); // &amp;quot;Test&amp;quot;

// 判断是否有效
bool isValid = DmJson.IsValid(json); // true&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-3-dmtext-&quot;&gt;&lt;a name=&quot;3.3 DmText 文本处理&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.3 DmText 文本处理&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Clean(string text)&lt;/code&gt;: 清理文本（去除多余空白）&lt;/li&gt;&lt;li&gt;&lt;code&gt;Paragraphs(string text)&lt;/code&gt;: 提取段落&lt;/li&gt;&lt;li&gt;&lt;code&gt;Keywords(string text, int count)&lt;/code&gt;: 提取关键词&lt;/li&gt;&lt;li&gt;&lt;code&gt;Title(string text)&lt;/code&gt;: 标题处理&lt;/li&gt;&lt;li&gt;&lt;code&gt;WordCount(string text)&lt;/code&gt;: 统计词数&lt;/li&gt;&lt;li&gt;&lt;code&gt;SafeName(string name)&lt;/code&gt;: 安全文件名&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

string text = &amp;quot;第一章 开始\n\n这是第一章的内容。\n\n第二章 发展\n\n这是第二章的内容。&amp;quot;;

// 清理文本
string cleaned = DmText.Clean(text); // &amp;quot;第一章 开始 这是第一章的内容。 第二章 发展 这是第二章的内容。&amp;quot;

// 提取段落
var paragraphs = DmText.Paragraphs(text); // 4个段落

// 提取关键词
var keywords = DmText.Keywords(text, 3); // [&amp;quot;第一章&amp;quot;, &amp;quot;开始&amp;quot;, &amp;quot;这是第一章的内容&amp;quot;]

// 标题处理
string title = DmText.Title(&amp;quot;  测试  标题  &amp;quot;); // &amp;quot;测试 标题&amp;quot;

// 统计词数
int wordCount = DmText.WordCount(text); // 32

// 安全文件名
string safeName = DmText.SafeName(&amp;quot;test/file?name.txt&amp;quot;); // &amp;quot;test_file_name.txt&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-4-dmfile-&quot;&gt;&lt;a name=&quot;3.4 DmFile 文件操作&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.4 DmFile 文件操作&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Read(string path)&lt;/code&gt;: 读取文件内容&lt;/li&gt;&lt;li&gt;&lt;code&gt;Write(string path, string content)&lt;/code&gt;: 写入文件&lt;/li&gt;&lt;li&gt;&lt;code&gt;Append(string path, string content)&lt;/code&gt;: 追加内容&lt;/li&gt;&lt;li&gt;&lt;code&gt;CreateDir(string path)&lt;/code&gt;: 创建目录&lt;/li&gt;&lt;li&gt;&lt;code&gt;Delete(string path)&lt;/code&gt;: 删除文件&lt;/li&gt;&lt;li&gt;&lt;code&gt;FileSize(string path)&lt;/code&gt;: 获取文件大小&lt;/li&gt;&lt;li&gt;&lt;code&gt;SaveBytes(byte[] bytes, string path)&lt;/code&gt;: 保存字节数组&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 写入文件
bool writeResult = DmFile.Write(&amp;quot;test.txt&amp;quot;, &amp;quot;Hello, DmFile!&amp;quot;);

// 读取文件
string content = DmFile.Read(&amp;quot;test.txt&amp;quot;); // &amp;quot;Hello, DmFile!&amp;quot;

// 追加内容
bool appendResult = DmFile.Append(&amp;quot;test.txt&amp;quot;, &amp;quot;\nAppend test&amp;quot;);

// 获取文件大小
long fileSize = DmFile.FileSize(&amp;quot;test.txt&amp;quot;);

// 删除文件
bool deleteResult = DmFile.Delete(&amp;quot;test.txt&amp;quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-5-dmcrypto-&quot;&gt;&lt;a name=&quot;3.5 DmCrypto 加密操作&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.5 DmCrypto 加密操作&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MD5Encrypt(string text)&lt;/code&gt;: MD5 加密（小写）&lt;/li&gt;&lt;li&gt;&lt;code&gt;SHA256Encrypt(string text)&lt;/code&gt;: SHA256 加密&lt;/li&gt;&lt;li&gt;&lt;code&gt;AESEnc(string text, string key)&lt;/code&gt;: AES 加密&lt;/li&gt;&lt;li&gt;&lt;code&gt;AESDec(string text, string key)&lt;/code&gt;: AES 解密&lt;/li&gt;&lt;li&gt;&lt;code&gt;Random(int len)&lt;/code&gt;: 生成随机字母数字串&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

string text = &amp;quot;test123&amp;quot;;
string key = &amp;quot;secretkey&amp;quot;;

// MD5 加密
string md5 = DmCrypto.MD5Encrypt(text); // &amp;quot;cc03e747a6afbbcbf8be7668acfebee5&amp;quot;

// SHA256 加密
string sha256 = DmCrypto.SHA256Encrypt(text);

// AES 加密
string encrypted = DmCrypto.AESEnc(text, key);

// AES 解密
string decrypted = DmCrypto.AESDec(encrypted, key); // &amp;quot;test123&amp;quot;

// 生成随机字符串
string random = DmCrypto.Random(10); // 10位随机字符串&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-6-dmtime-&quot;&gt;&lt;a name=&quot;3.6 DmTime 时间操作&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.6 DmTime 时间操作&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Now()&lt;/code&gt;: 获取当前时间&lt;/li&gt;&lt;li&gt;&lt;code&gt;ToStamp(DateTime dt)&lt;/code&gt;: 转为秒级时间戳&lt;/li&gt;&lt;li&gt;&lt;code&gt;FromStamp(long ts)&lt;/code&gt;: 时间戳转回 DateTime&lt;/li&gt;&lt;li&gt;&lt;code&gt;Date(DateTime dt)&lt;/code&gt;: 格式化为 yyyy-MM-dd&lt;/li&gt;&lt;li&gt;&lt;code&gt;FormatDateTime(DateTime dt)&lt;/code&gt;: 格式化为 yyyy-MM-dd HH:mm:ss&lt;/li&gt;&lt;li&gt;&lt;code&gt;DayDiff(DateTime end)&lt;/code&gt;: 计算与目标时间的相差天数&lt;/li&gt;&lt;li&gt;&lt;code&gt;MinDiff(DateTime end)&lt;/code&gt;: 计算与目标时间的相差分钟数&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 获取当前时间
DateTime now = DmTime.Now();

// 转为时间戳
long stamp = DmTime.ToStamp(now);

// 时间戳转回
DateTime fromStamp = DmTime.FromStamp(stamp);

// 格式化日期
string date = DmTime.Date(now); // &amp;quot;2024-01-01&amp;quot;

// 格式化日期时间
string dateTime = DmTime.FormatDateTime(now); // &amp;quot;2024-01-01 12:00:00&amp;quot;

// 计算天数差
int dayDiff = DmTime.DayDiff(now.AddDays(1)); // 1

// 计算分钟差
int minDiff = DmTime.MinDiff(now.AddMinutes(30)); // 30&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-7-dmvalidate-&quot;&gt;&lt;a name=&quot;3.7 DmValidate 数据校验&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.7 DmValidate 数据校验&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IsUrl(string url)&lt;/code&gt;: 判断是否为有效网址&lt;/li&gt;&lt;li&gt;&lt;code&gt;IsPhone(string phone)&lt;/code&gt;: 判断是否为手机号&lt;/li&gt;&lt;li&gt;&lt;code&gt;IsEmail(string email)&lt;/code&gt;: 判断是否为邮箱&lt;/li&gt;&lt;li&gt;&lt;code&gt;IsImg(string ext)&lt;/code&gt;: 判断是否为图片格式&lt;/li&gt;&lt;li&gt;&lt;code&gt;IsVideo(string ext)&lt;/code&gt;: 判断是否为视频格式&lt;/li&gt;&lt;li&gt;&lt;code&gt;LenIn(string text, int min, int max)&lt;/code&gt;: 判断文本长度是否在指定区间&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 验证网址
bool isUrl = DmValidate.IsUrl(&amp;quot;https://www.example.com&amp;quot;); // true

// 验证手机号
bool isPhone = DmValidate.IsPhone(&amp;quot;13812345678&amp;quot;); // true

// 验证邮箱
bool isEmail = DmValidate.IsEmail(&amp;quot;test@example.com&amp;quot;); // true

// 验证图片格式
bool isImg = DmValidate.IsImg(&amp;quot;.jpg&amp;quot;); // true

// 验证视频格式
bool isVideo = DmValidate.IsVideo(&amp;quot;.mp4&amp;quot;); // true

// 验证长度
bool lenIn = DmValidate.LenIn(&amp;quot;test&amp;quot;, 2, 5); // true&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-8-dmhttp-&quot;&gt;&lt;a name=&quot;3.8 DmHttp 网络操作&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.8 DmHttp 网络操作&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GetAsync(string url, Dictionary&amp;lt;string, string&amp;gt; headers = null)&lt;/code&gt;: GET 请求&lt;/li&gt;&lt;li&gt;&lt;code&gt;PostJsonAsync(string url, object data, Dictionary&amp;lt;string, string&amp;gt; headers = null)&lt;/code&gt;: POST JSON 请求&lt;/li&gt;&lt;li&gt;&lt;code&gt;PostFormAsync(string url, Dictionary&amp;lt;string, string&amp;gt; formData, Dictionary&amp;lt;string, string&amp;gt; headers = null)&lt;/code&gt;: POST 表单请求&lt;/li&gt;&lt;li&gt;&lt;code&gt;HtmlAsync(string url, Dictionary&amp;lt;string, string&amp;gt; headers = null)&lt;/code&gt;: 获取网页源码&lt;/li&gt;&lt;li&gt;&lt;code&gt;DownloadAsync(string url, string savePath, Dictionary&amp;lt;string, string&amp;gt; headers = null)&lt;/code&gt;: 下载文件&lt;/li&gt;&lt;li&gt;&lt;code&gt;SetTimeout(int milliseconds)&lt;/code&gt;: 设置全局超时时间&lt;/li&gt;&lt;li&gt;&lt;code&gt;AddDefaultHeader(string name, string value)&lt;/code&gt;: 添加全局默认请求头&lt;/li&gt;&lt;li&gt;&lt;code&gt;ClearDefaultHeaders()&lt;/code&gt;: 清除所有全局默认请求头&lt;/li&gt;&lt;li&gt;&lt;code&gt;GetAllCookies()&lt;/code&gt;: 获取当前存储的所有 Cookie&lt;/li&gt;&lt;li&gt;&lt;code&gt;ClearCookies()&lt;/code&gt;: 清空 Cookie 容器&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// GET 请求
string getResult = await DmHttp.GetAsync(&amp;quot;https://httpbin.org/get&amp;quot;);

// POST JSON 请求
var postData = new { name = &amp;quot;test&amp;quot;, age = 18 };
string postResult = await DmHttp.PostJsonAsync(&amp;quot;https://httpbin.org/post&amp;quot;, postData);

// POST 表单请求
var formData = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;name&amp;quot;, &amp;quot;test&amp;quot; }, { &amp;quot;age&amp;quot;, &amp;quot;18&amp;quot; } };
string formResult = await DmHttp.PostFormAsync(&amp;quot;https://httpbin.org/post&amp;quot;, formData);

// 获取网页源码
string html = await DmHttp.HtmlAsync(&amp;quot;https://www.example.com&amp;quot;);

// 下载文件
bool downloadResult = await DmHttp.DownloadAsync(&amp;quot;https://example.com/file.txt&amp;quot;, &amp;quot;local-file.txt&amp;quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-9-edgetranslator-&quot;&gt;&lt;a name=&quot;3.9 EdgeTranslator 翻译功能&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.9 EdgeTranslator 翻译功能&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;TranslateAsync(string 源语言, string 目标语言, string[] 翻译的文本)&lt;/code&gt;: 批量翻译&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u652Fu6301u7684u8BEDu8A00u4EE3u7801&quot;&gt;&lt;a name=&quot;支持的语言代码&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;支持的语言代码&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;中文: zh-CHS&lt;/li&gt;&lt;li&gt;英文: en&lt;/li&gt;&lt;li&gt;日文: ja&lt;/li&gt;&lt;li&gt;韩文: ko&lt;/li&gt;&lt;li&gt;法语: fr&lt;/li&gt;&lt;li&gt;德语: de&lt;/li&gt;&lt;li&gt;西班牙语: es&lt;/li&gt;&lt;li&gt;俄语: ru&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 单文本翻译
var resultList = await EdgeTranslator.TranslateAsync(&amp;quot;en&amp;quot;, &amp;quot;zh-CHS&amp;quot;, new string[] { &amp;quot;Hello, world!&amp;quot; });
string result = resultList[0]; // &amp;quot;你好，世界！&amp;quot;

// 批量翻译
string[] texts = { &amp;quot;Hello&amp;quot;, &amp;quot;World&amp;quot;, &amp;quot;Translation&amp;quot; };
var batchResult = await EdgeTranslator.TranslateAsync(&amp;quot;en&amp;quot;, &amp;quot;zh-CHS&amp;quot;, texts);
// batchResult: [&amp;quot;你好&amp;quot;, &amp;quot;世界&amp;quot;, &amp;quot;翻译&amp;quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-10-dmtts-&quot;&gt;&lt;a name=&quot;3.10 DmTTS 语音合成&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.10 DmTTS 语音合成&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Speak(string text)&lt;/code&gt;: 播放语音&lt;/li&gt;&lt;li&gt;&lt;code&gt;Save(string text)&lt;/code&gt;: 保存语音到文件&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 播放语音
DmTTS.Speak(&amp;quot;Hello, this is a test of text to speech.&amp;quot;);

// 保存语音
string savePath = DmTTS.Save(&amp;quot;Hello, this is a test of text to speech.&amp;quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-11-dmai-&quot;&gt;&lt;a name=&quot;3.11 DmAI 大模型调用&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.11 DmAI 大模型调用&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SetProvider(AIProvider provider, string apiKey, string model = null)&lt;/code&gt;: 设置 AI 提供商&lt;/li&gt;&lt;li&gt;&lt;code&gt;SetTemperature(double temperature)&lt;/code&gt;: 设置温度&lt;/li&gt;&lt;li&gt;&lt;code&gt;SetMaxTokens(int maxTokens)&lt;/code&gt;: 设置最大生成长度&lt;/li&gt;&lt;li&gt;&lt;code&gt;SetModel(string model)&lt;/code&gt;: 设置模型名称&lt;/li&gt;&lt;li&gt;&lt;code&gt;ChatAsync(string prompt, CancellationToken cancellationToken = default)&lt;/code&gt;: 单次对话&lt;/li&gt;&lt;li&gt;&lt;code&gt;ChatHistoryAsync(List&amp;lt;ChatMsg&amp;gt; messages, CancellationToken cancellationToken = default)&lt;/code&gt;: 带历史记录的对话&lt;/li&gt;&lt;li&gt;&lt;code&gt;StreamAsync(string prompt, CancellationToken cancellationToken = default)&lt;/code&gt;: 流式对话&lt;/li&gt;&lt;li&gt;&lt;code&gt;StreamHistoryAsync(List&amp;lt;ChatMsg&amp;gt; messages, CancellationToken cancellationToken = default)&lt;/code&gt;: 带历史记录的流式对话&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4--ai-&quot;&gt;&lt;a name=&quot;支持的 AI 提供商&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;支持的 AI 提供商&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AIProvider.Zhipu&lt;/code&gt;: 智谱AI&lt;/li&gt;&lt;li&gt;&lt;code&gt;AIProvider.Hunyuan&lt;/code&gt;: 腾讯混元&lt;/li&gt;&lt;li&gt;&lt;code&gt;AIProvider.Doubao&lt;/code&gt;: 豆包（火山引擎）&lt;/li&gt;&lt;li&gt;&lt;code&gt;AIProvider.Qwen&lt;/code&gt;: 通义千问（阿里云）&lt;/li&gt;&lt;li&gt;&lt;code&gt;AIProvider.DeepSeek&lt;/code&gt;: DeepSeek（深度求索）&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 设置智谱AI
DmAI.SetProvider(AIProvider.Zhipu, &amp;quot;your-api-key-here&amp;quot;);

// 单次对话
string result = await DmAI.ChatAsync(&amp;quot;讲个笑话&amp;quot;);

// 带历史记录的对话
var history = new List&amp;lt;ChatMsg&amp;gt;
{
    new ChatMsg { Role = &amp;quot;user&amp;quot;, Content = &amp;quot;你好&amp;quot; },
    new ChatMsg { Role = &amp;quot;assistant&amp;quot;, Content = &amp;quot;你好！我是AI助手。&amp;quot; }
};
string historyResult = await DmAI.ChatHistoryAsync(history);

// 流式对话
await foreach (var chunk in DmAI.StreamAsync(&amp;quot;你好，简单介绍一下你自己&amp;quot;))
{
    Console.Write(chunk);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-12-dmconfig-&quot;&gt;&lt;a name=&quot;3.12 DmConfig 配置管理&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.12 DmConfig 配置管理&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Set(string key, string value)&lt;/code&gt;: 设置配置&lt;/li&gt;&lt;li&gt;&lt;code&gt;Get(string key, string defaultValue = &amp;quot;&amp;quot;)&lt;/code&gt;: 获取配置&lt;/li&gt;&lt;li&gt;&lt;code&gt;GetInt(string key, int defaultValue = 0)&lt;/code&gt;: 获取整数配置&lt;/li&gt;&lt;li&gt;&lt;code&gt;GetBool(string key, bool defaultValue = false)&lt;/code&gt;: 获取布尔配置&lt;/li&gt;&lt;li&gt;&lt;code&gt;GetDouble(string key, double defaultValue = 0)&lt;/code&gt;: 获取浮点数配置&lt;/li&gt;&lt;li&gt;&lt;code&gt;Remove(string key)&lt;/code&gt;: 移除配置&lt;/li&gt;&lt;li&gt;&lt;code&gt;Exists(string key)&lt;/code&gt;: 检查配置是否存在&lt;/li&gt;&lt;li&gt;&lt;code&gt;Clear()&lt;/code&gt;: 清空所有配置&lt;/li&gt;&lt;li&gt;&lt;code&gt;Save()&lt;/code&gt;: 保存配置到文件&lt;/li&gt;&lt;li&gt;&lt;code&gt;Load()&lt;/code&gt;: 从文件加载配置&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 设置配置
DmConfig.Set(&amp;quot;api_key&amp;quot;, &amp;quot;your-api-key&amp;quot;);

// 获取配置
string apiKey = DmConfig.Get(&amp;quot;api_key&amp;quot;);

// 获取整数配置
int timeout = DmConfig.GetInt(&amp;quot;timeout&amp;quot;, 30000);

// 获取布尔配置
bool debug = DmConfig.GetBool(&amp;quot;debug&amp;quot;, false);

// 保存配置
DmConfig.Save();

// 加载配置
DmConfig.Load();&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-13-dmdb-&quot;&gt;&lt;a name=&quot;3.13 DmDB 数据库操作&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.13 DmDB 数据库操作&lt;/h3&gt;&lt;h4 id=&quot;h4-u65B9u6CD5u5217u8868&quot;&gt;&lt;a name=&quot;方法列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法列表&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SetConn(string conn)&lt;/code&gt;: 设置数据库连接字符串&lt;/li&gt;&lt;li&gt;&lt;code&gt;Query&amp;lt;T&amp;gt;(string sql, object param = null)&lt;/code&gt;: 查询列表&lt;/li&gt;&lt;li&gt;&lt;code&gt;First&amp;lt;T&amp;gt;(string sql, object param = null)&lt;/code&gt;: 查询单条数据&lt;/li&gt;&lt;li&gt;&lt;code&gt;Exec(string sql, object param = null)&lt;/code&gt;: 执行增删改SQL&lt;/li&gt;&lt;li&gt;&lt;code&gt;Insert&amp;lt;T&amp;gt;(T entity)&lt;/code&gt;: 插入实体&lt;/li&gt;&lt;li&gt;&lt;code&gt;Update&amp;lt;T&amp;gt;(T entity)&lt;/code&gt;: 更新实体&lt;/li&gt;&lt;li&gt;&lt;code&gt;Delete&amp;lt;T&amp;gt;(object id)&lt;/code&gt;: 根据主键删除&lt;/li&gt;&lt;/ul&gt;
&lt;h4 id=&quot;h4-u4F7Fu7528u793Au4F8B&quot;&gt;&lt;a name=&quot;使用示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;使用示例&lt;/h4&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;

// 设置连接字符串
DmDB.SetConn(&amp;quot;Data Source=test.db&amp;quot;);

// 创建表
DmDB.Exec(&amp;quot;CREATE TABLE IF NOT EXISTS User (Id INTEGER PRIMARY KEY, Name TEXT, Age INTEGER)&amp;quot;);

// 插入数据
var user = new { Id = 1, Name = &amp;quot;Test&amp;quot;, Age = 18 };
DmDB.Insert(user);

// 查询数据
var users = DmDB.Query&amp;lt;dynamic&amp;gt;(&amp;quot;SELECT * FROM User&amp;quot;);

// 更新数据
user.Age = 19;
DmDB.Update(user);

// 删除数据
DmDB.Delete&amp;lt;dynamic&amp;gt;(1);&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-4-&quot;&gt;&lt;a name=&quot;4. 完整测试示例&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4. 完整测试示例&lt;/h2&gt;&lt;h3 id=&quot;h3-4-1-&quot;&gt;&lt;a name=&quot;4.1 测试文件结构&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.1 测试文件结构&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;dm98.Test/
└── Program.cs          # 测试主文件&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;h3-4-2-&quot;&gt;&lt;a name=&quot;4.2 测试代码&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.2 测试代码&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;using dm98;
using System.Text;
using System.Collections.Generic;

class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine(&amp;quot;=== dm98 工具库测试 ===&amp;quot;);
        Console.WriteLine();

        // 测试 DmString 字符串扩展
        await TestDmString();
        Console.WriteLine();

        // 测试 DmJson JSON 操作
        await TestDmJson();
        Console.WriteLine();

        // 测试 DmText 文本处理
        await TestDmText();
        Console.WriteLine();

        // 测试 DmFile 文件操作
        await TestDmFile();
        Console.WriteLine();

        // 测试 DmCrypto 加密操作
        await TestDmCrypto();
        Console.WriteLine();

        // 测试 DmTime 时间操作
        await TestDmTime();
        Console.WriteLine();

        // 测试 DmValidate 校验操作
        await TestDmValidate();
        Console.WriteLine();

        // 测试 DmHttp 网络操作
        await TestDmHttp();
        Console.WriteLine();

        // 测试 EdgeTranslator 翻译操作
        await TestEdgeTranslator();
        Console.WriteLine();

        // 测试 DmTTS 语音合成操作
        await TestDmTTS();
        Console.WriteLine();

        // 测试 DmAI 大模型操作
        await TestDmAI();
        Console.WriteLine();

        Console.WriteLine(&amp;quot;=== 测试完成 ===&amp;quot;);
        Console.WriteLine();
        Console.WriteLine(&amp;quot;按任意键退出...&amp;quot;);
        Console.ReadLine();
    }

    // 各模块测试方法...
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-5-&quot;&gt;&lt;a name=&quot;5. 依赖项&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5. 依赖项&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;依赖项&lt;/th&gt;
&lt;th&gt;版本&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Edge_tts_sharp&lt;/td&gt;
&lt;td&gt;1.1.7&lt;/td&gt;
&lt;td&gt;语音合成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dapper&lt;/td&gt;
&lt;td&gt;2.1.28&lt;/td&gt;
&lt;td&gt;数据库操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System.Data.SQLite&lt;/td&gt;
&lt;td&gt;1.0.118&lt;/td&gt;
&lt;td&gt;SQLite 数据库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newtonsoft.Json&lt;/td&gt;
&lt;td&gt;13.0.3&lt;/td&gt;
&lt;td&gt;JSON 处理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;h2-6-&quot;&gt;&lt;a name=&quot;6. 注意事项&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;6. 注意事项&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI 模块&lt;/strong&gt;：使用 DmAI 需要提供相应的 API Key，不同提供商的 API Key 格式不同，请根据实际情况设置。&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;翻译模块&lt;/strong&gt;：EdgeTranslator 使用的是 Edge 浏览器的翻译 API，可能会受到网络环境的影响。&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;语音合成&lt;/strong&gt;：DmTTS 使用的是 Edge TTS 服务，需要网络连接。&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;数据库操作&lt;/strong&gt;：DmDB 默认使用 SQLite 数据库，需要确保 System.Data.SQLite 依赖已正确安装。&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;网络操作&lt;/strong&gt;：DmHttp 默认设置了 30 秒的超时时间，可以根据需要调整。&lt;/p&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;h2 id=&quot;h2-7-&quot;&gt;&lt;a name=&quot;7. 版本历史&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;7. 版本历史&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;版本&lt;/th&gt;
&lt;th&gt;日期&lt;/th&gt;
&lt;th&gt;变更内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;2024-03-28&lt;/td&gt;
&lt;td&gt;初始版本，包含所有基础功能&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;h2-8-&quot;&gt;&lt;a name=&quot;8. 联系方式&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;8. 联系方式&lt;/h2&gt;&lt;p&gt;如果您在使用过程中遇到问题，可以通过以下方式联系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;邮箱：&lt;a href=&quot;mailto:support@dm98.com&quot;&quot;&gt;support&amp;#64;dm98.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;GitHub：&lt;a href=&quot;https://github.com/dm98/dm98&quot;&gt;https://github.com/dm98/dm98&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;dm98 工具库&lt;/strong&gt; - 为 .NET 开发者提供便捷的工具集，让开发更高效！&lt;/p&gt;
</description><pubDate>Fri, 27 Mar 2026 21:43:35 +0800</pubDate></item><item><title>思源黑体下载</title><link>https://blog.dm98.vip/post/8.html</link><description>&lt;p&gt;【思源黑体】思源黑体字体下载，免费商用&lt;br&gt;&lt;a href=&quot;https://www.100font.com/thread-99.htm&quot;&gt;https://www.100font.com/thread-99.htm&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Fri, 27 Mar 2026 17:32:57 +0800</pubDate></item><item><title>VS2022社区版下载安装 + 通义灵码插件完整教程</title><link>https://blog.dm98.vip/post/7.html</link><description>&lt;h1 id=&quot;h1-vs2022-&quot;&gt;&lt;a name=&quot;VS2022社区版下载安装 + 通义灵码插件完整教程&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;VS2022社区版下载安装 + 通义灵码插件完整教程&lt;/h1&gt;&lt;p&gt;（含安装步骤+登录+常用快捷键+使用技巧，一次看懂）&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--vs2022-&quot;&gt;&lt;a name=&quot;一、下载并安装 VS2022 社区版（免费）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、下载并安装 VS2022 社区版（免费）&lt;/h2&gt;&lt;h3 id=&quot;h3-1-&quot;&gt;&lt;a name=&quot;1. 下载安装程序&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 下载安装程序&lt;/h3&gt;&lt;p&gt;官方直链（直接复制到浏览器打开即可）：&lt;br&gt;&lt;a href=&quot;https://aka.ms/vs/17/release/vs_community.exe&quot;&gt;https://aka.ms/vs/17/release/vs_community.exe&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;h3-2-vs2022&quot;&gt;&lt;a name=&quot;2. 安装 VS2022&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 安装 VS2022&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;双击运行 &lt;code&gt;vs_community.exe&lt;/code&gt;&lt;/li&gt;&lt;li&gt;在弹出的界面中，根据开发需求勾选工作负载：&lt;ul&gt;
&lt;li&gt;做桌面软件：勾选 &lt;strong&gt;.NET 桌面开发&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;做网站/后端：勾选 &lt;strong&gt;ASP.NET 和 Web 开发&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;做C/C++：勾选 &lt;strong&gt;使用C++的桌面开发&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;可默认安装路径，点击 &lt;strong&gt;安装&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;等待下载安装完成，重启电脑&lt;/li&gt;&lt;li&gt;打开 VS2022，登录微软账号，社区版自动免费激活&lt;/li&gt;&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：通义灵码要求 VS2022 版本 ≥ 17.4，安装后建议更新到最新版。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;二、安装通义灵码插件&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、安装通义灵码插件&lt;/h2&gt;&lt;h3 id=&quot;h3--1-vs-&quot;&gt;&lt;a name=&quot;方法1：在 VS 内安装（推荐）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法1：在 VS 内安装（推荐）&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;打开 VS2022&lt;/li&gt;&lt;li&gt;点击顶部菜单：&lt;strong&gt;扩展 → 管理扩展&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;右上角搜索：&lt;strong&gt;TONGYI Lingma / 通义灵码&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;找到后点击 &lt;strong&gt;下载&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;关闭 VS2022，会自动弹出安装窗口，点安装即可&lt;/li&gt;&lt;/ol&gt;
&lt;h3 id=&quot;h3--2-&quot;&gt;&lt;a name=&quot;方法2：离线安装包&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;方法2：离线安装包&lt;/h3&gt;&lt;p&gt;下载地址：&lt;br&gt;&lt;a href=&quot;https://tongyi.aliyun.com/lingma/download/vs2022&quot;&gt;https://tongyi.aliyun.com/lingma/download/vs2022&lt;/a&gt;&lt;br&gt;下载后关闭 VS，双击 &lt;code&gt;.vsix&lt;/code&gt; 文件一路下一步安装。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;三、登录通义灵码&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;三、登录通义灵码&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;重新打开 VS2022&lt;/li&gt;&lt;li&gt;顶部菜单：&lt;strong&gt;工具 → 通义灵码 → 登录&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;用浏览器扫码登录阿里云账号（无账号可免费注册）&lt;/li&gt;&lt;li&gt;登录成功后，插件即可正常使用&lt;/li&gt;&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--vs2022-&quot;&gt;&lt;a name=&quot;四、通义灵码常用快捷键（VS2022）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;四、通义灵码常用快捷键（VS2022）&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;快捷键&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;触发代码智能续写&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Alt + ]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;取消/关闭提示&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;接受当前整行建议&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;查看多条建议&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Alt + [ / Alt + ]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;打开通义灵码对话窗口&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + ,&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;选中代码 → 解释代码&lt;/td&gt;
&lt;td&gt;选中代码按 &lt;code&gt;Ctrl + Alt + ,&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;选中代码 → 生成注释&lt;/td&gt;
&lt;td&gt;右键 → 通义灵码 → 生成注释&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;选中代码 → 优化/重构&lt;/td&gt;
&lt;td&gt;右键 → 通义灵码 → 优化代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自然语言生成代码&lt;/td&gt;
&lt;td&gt;打开对话窗口，直接打字描述需求&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;五、基础使用技巧&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;五、基础使用技巧&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;自动代码补全&lt;/strong&gt;&lt;br&gt;敲代码时灵码会自动给出灰色提示，按 &lt;code&gt;Tab&lt;/code&gt; 直接采纳。&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;用自然语言写代码&lt;/strong&gt;&lt;br&gt;打开灵码对话窗口，输入：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;写一个C# WinFORM登录窗口&lt;/li&gt;&lt;li&gt;写一个Python爬虫示例&lt;/li&gt;&lt;li&gt;帮我写一个SQL查询用户表语句&lt;br&gt;插件会直接生成完整代码。&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;代码解释与排错&lt;/strong&gt;&lt;br&gt;选中看不懂的代码 → 右键 → 通义灵码 → 解释代码&lt;br&gt;报错时可直接复制错误信息发给灵码查原因。&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;一键生成注释&lt;/strong&gt;&lt;br&gt;选中方法/函数 → 右键 → 生成文档注释，自动生成规范注释。&lt;/p&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;h2--&quot;&gt;&lt;a name=&quot;六、常见小问题&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;六、常见小问题&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;插件不显示：重启 VS2022，或在 &lt;strong&gt;扩展 → 已安装&lt;/strong&gt; 里启用&lt;/li&gt;&lt;li&gt;登录失败：检查网络，退出重登阿里云账号&lt;/li&gt;&lt;li&gt;不提示代码：在 &lt;strong&gt;工具 → 通义灵码 → 设置&lt;/strong&gt; 里打开自动补全&lt;/li&gt;&lt;/ol&gt;
</description><pubDate>Fri, 27 Mar 2026 16:34:20 +0800</pubDate></item></channel></rss>