EF+WinForm数据库连接动态配置:告别App.config,实现运行时切换
简介EF与WinForms开发中动态修改数据库连接配置是一类常见需求。这份示例项目面向需要在桌面应用中灵活切换数据库的.NET开发人员也适合学习Entity Framework Code First模式与WinForms界面交互的中级开发者。项目基于Code First方式定义了实体类与上下文类并附带可直接运行调试的数据库文件方便从零开始理解数据模型与界面操作如何联动。压缩包共含240个文件大小61.27MB。其中95个cs源文件覆盖业务逻辑、界面代码与上下文类30个dll与6个csproj组成完整可编译工程9个config文件展示了连接字符串的动态配置与保存方式同时还有edmx、ssdl、msl等EF映射文件以及mdf、ldf数据库文件从源代码到数据库层都比较齐全。CSDN上已有449人学习下载该示例。通过它可掌握在WinForms中利用ConfigurationManager读写连接字符串、基于DbContext执行CRUD操作并动态传入新连接字符串的完整思路也能借助附带的PowerShell脚本与NuGet包结构理解项目的部署和依赖管理对实际项目中的多环境切换很有参考价值。1. EFWinForm的连接配置数据库地址不该困死在App.config里把EFWinForm项目交付出去最容易翻车的不是增删改查写错而是数据库连接串还写在App.config里。客户换了服务器IP、改了SQL实例名只能求着开发改文件改完还得重启程序。这个标题要做的事很具体在WinForm界面里加一个配置入口让使用者改服务器、库名、账号密码保存后EF立即用新连接跑同时安装包里附带数据库文件保证换一台机器也能把库初始化起来。适合正在做WinForm项目案例、外包交付或内部工具的人也是EF Core面试题里常被追问的“连接生命周期”的实战场。下面的写法以EF6为主兼顾EF Core代码可以直接落到你的解决方案里。2. 连接字符串才是关键EF6的两种连接串形态与动态配置的存储设计运行时可修改配置连接难点不在WinForm界面而在EF对连接字符串的处理方式。EF6项目分两类一类是CodeFirst或普通DbFirst代码生成的上下文连接串就是SqlClient能直接用的ADO串另一类是带了.edmx模型的DatabaseFirst项目连接串必须由EntityConnectionStringBuilder组装前面带一段metadata元数据信息。动态配置连不上、连错库九成都是这两种形态混用造成的。2.1 EF6连接字符串的两种形态普通连接串与EntityConnectionStringBuilder.edmx模型生成的连接串长这样connectionStrings add nameMyDbEntities connectionStringmetadatares://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;providerSystem.Data.SqlClient;provider connection stringquot;data sourcelocalhost;initial catalogMyDb;integrated securityTrue;MultipleActiveResultSetsTruequot; providerNameSystem.Data.EntityClient / /connectionStrings这段配置里有三个部分metadata是EF定位模型文件用的provider声明底层数据访问提供程序provider connection string才是真正传给SqlClient的连接参数。注意末尾的quot;是把内层连接串里的双引号做了XML转义手动拼的时候特别容易漏。动态换连接时最稳的做法不是拼字符串而是用EntityConnectionStringBuilder重新组装var sqlBuilder new SqlConnectionStringBuilder { DataSource 192.168.1.10, InitialCatalog MyDb, IntegratedSecurity true, MultipleActiveResultSets true }; var entityBuilder new EntityConnectionStringBuilder { Provider System.Data.SqlClient, ProviderConnectionString sqlBuilder.ConnectionString, Metadata res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl }; string dynamicConnString entityBuilder.ConnectionString;这里的Metadata字符串必须与你的.edmx实际文件名一致MyModel换成你的模型名。Provider固定为System.Data.SqlClient不要动。EntityConnectionStringBuilder会负责把内层连接串的引号和转义处理干净省去手动拼接的麻烦。2.2 配置存储放哪里App.config不适合运行时修改很多人第一反应是“运行时改App.config里的连接字符串就行”。但ConfigurationManager读取的连接字符串集合是程序启动时加载的一次性快照运行中改文件不会让已经存在的配置项生效而且EF内部对MetadataWorkspace也有缓存。改完不重启界面还是连旧库客户以为配置没生效实际是被缓存挡在了外面。我在交付项目里通常把用户可改的连接参数单独存到一个配置文件里跟App.config分开。这样既不动程序集配置文件也能在运行时随意读写public class DbConfig { public string Server { get; set; } public string Database { get; set; } public string UserId { get; set; } public string Password { get; set; } public bool IntegratedSecurity { get; set; } } public static class ConfigStore { private static readonly string ConfigPath Path.Combine(AppDomain.CurrentDomain.BaseDirectory, db.config); public static void Save(DbConfig config) { var serializer new XmlSerializer(typeof(DbConfig)); using (var fs File.Create(ConfigPath)) { serializer.Serialize(fs, config); } } public static DbConfig Load() { if (!File.Exists(ConfigPath)) return new DbConfig(); var serializer new XmlSerializer(typeof(DbConfig)); using (var fs File.OpenRead(ConfigPath)) { return (DbConfig)serializer.Deserialize(fs); } } }配置文件路径取AppDomain.CurrentDomain.BaseDirectory也就是exe所在目录不要取Environment.CurrentDirectory。WinForm程序用快捷方式启动时当前目录可能是启动目录而不是程序集目录路径错位是后面一系列“找不到数据库文件”问题的源头。用XmlSerializer存配置有个好处字段增减时旧文件反序列化会失败所以发布新版时要么保留旧字段要么在Load里做异常兜底给用户返回默认配置而不是直接崩溃。2.3 连接串组装用SqlConnectionStringBuilder而不是手动拼接保存配置后要生成真正的连接串。手写字符串容易出三类问题关键字拼写错、分号多一个少一个、LocalDB路径里的反斜杠被转义吃掉。我一般把组装逻辑放在DbConfig里public string BuildSqlConnectionString() { var sql new SqlConnectionStringBuilder { DataSource Server, InitialCatalog Database, IntegratedSecurity IntegratedSecurity }; if (!IntegratedSecurity) { sql.UserID UserId; sql.Password Password; } // EF下的DataReader场景多这个开关必须开着 sql.MultipleActiveResultSets true; return sql.ConnectionString; } public string BuildEntityConnectionString() { var sql BuildSqlConnectionString(); var entity new EntityConnectionStringBuilder { Provider System.Data.SqlClient, ProviderConnectionString sql, Metadata res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl }; return entity.ConnectionString; }MultipleActiveResultSets必须设为true。EF在延迟加载和导航属性访问时可能同时打开多个DataReader不开MARS会报“已存在活动的DataReader”错误这个错在开发机上偶尔出现到了客户机器上就是必现因为客户机器网络延迟更高查询重叠的概率更大。IntegratedSecurity选true走Windows账号选false走SQL账号两种情况都要测一遍再交付。3. 在WinForm中替换EF连接从构造函数到连接测试按钮的完整代码上一章解决的是“连接串怎么拼”这一章解决“拼好之后怎么让EF用起来”。核心原则就一条动态连接串必须走DbContext的构造函数而且每次切换配置都要创建新的DbContext实例不能复用旧的上下文对象。3.1 给DbContext一个可换连接串的构造函数DatabaseFirst生成的上下文类默认有两个构造函数一个无参一个接收connectionString。无参构造函数内部走的是“nameMyDbEntities”这种配置文件查找方式接收字符串的构造函数则把传入值直接当作连接串处理。如果你的项目生成代码里没有接收string的构造函数手动补一个public partial class MyDbEntities : DbContext { // 无参构造函数保留不启用动态配置时继续走App.config public MyDbEntities() : base(nameMyDbEntities) { } // 新增接收动态连接串的构造函数 public MyDbEntities(string connectionString) : base(connectionString) { } }使用动态配置时必须明确调用带参数的构造函数。这里有个关键区别base传入的是“name...”开头的字符串EF会按名称去配置文件里找传入的是以“metadata”或“data source”开头的字符串EF会直接解析为连接串。如果只传一个普通SqlClient连接串给带.edmx的上下文EF会因为找不到metadata而抛异常。调用方式var config ConfigStore.Load(); string connString config.BuildEntityConnectionString(); using (var db new MyDbEntities(connString)) { var list db.Users.ToList(); }CodeFirst项目没有.edmx不需要metadata直接用BuildSqlConnectionString的结果传给构造函数即可。判断你的项目属于哪种看解决方案里有没有.edmx文件有就走EntityConnectionStringBuilder那条路。3.2 连接测试按钮先SELECT 1再保存避免把错误串写进配置配置窗体的保存按钮不能直接写配置必须先做一次真实连接测试。用SqlConnection做测试比直接new DbContext更干净因为不触发EF的元数据加载错误信息更直白private bool TestConnection(string connectionString) { try { using (var conn new SqlConnection(connectionString)) { conn.Open(); using (var cmd conn.CreateCommand()) { cmd.CommandText SELECT 1; return Convert.ToInt32(cmd.ExecuteScalar()) 1; } } } catch (Exception ex) { MessageBox.Show(ex.Message, 连接失败, MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } }只调用Open只能验证“网络通、账号密码对”验证不了“默认库可读”。SELECT 1强制走一次查询能把数据库离线、账号没有库访问权限、连接串InitialCatalog指向不存在的库这三类问题暴露出来。测试通过后再执行保存private void btnSave_Click(object sender, EventArgs e) { var config new DbConfig { Server txtServer.Text.Trim(), Database txtDatabase.Text.Trim(), UserId txtUser.Text.Trim(), Password txtPassword.Text, IntegratedSecurity chkWindowsAuth.Checked }; string testConn chkUseEdmx.Checked ? config.BuildEntityConnectionString() : config.BuildSqlConnectionString(); if (!TestConnection(testConn)) return; ConfigStore.Save(config); // 提示用户下次新建数据库操作时自动生效无需重启程序 }注意密码字段不要Trim有些SQL账号密码本身就可能带空格。保存后不重启程序只要下一个数据库操作创建新的DbContext就会读到新配置。3.3 EF Core下的替代方案用DbContextFactory创建带新连接串的上下文如果你的项目已经升级到EF Core情况略有不同。EF Core的DbContext构造函数通常是接收DbContextOptions参数的动态配置更推荐用工厂方式封装public static class MyDbContextFactory { public static MyCoreDbContext Create(string connectionString) { var options new DbContextOptionsBuilderMyCoreDbContext() .UseSqlServer(connectionString) .Options; return new MyCoreDbContext(options); } }调用时同样每次创建新实例using (var db MyDbContextFactory.Create(BuildSqlConnectionString())) { var list db.Products.Where(p p.Price 100).ToList(); }EF Core面试题里常问的“上下文生命周期”问题落地到WinForm就是这个场景长生命周期统一用单例短生命周期业务操作统一用using包裹。动态配置连接的情况下尤其不能长生命周期持有上下文因为配置变了旧上下文里缓存的连接不会自动切换。用工厂方式还有一个好处后期如果引入依赖注入只需要替换工厂内部的创建逻辑窗体代码不用动。4. 避坑清单修改EF连接后不生效、找不到数据库文件等问题排查动态连接配置的坑集中爆发在交付阶段。这里列五条我实际踩过、也帮人排查过的记录按“现象 → 原因 → 解决”写每一条都对应一个真实翻车现场。4.1 改完配置文件界面没反应ConfigurationManager的缓存不是热更新现象在配置窗体里保存了新服务器地址界面提示保存成功但重新查询数据还是连旧库。原因ConfigurationManager.ConnectionStrings是进程启动时构建的缓存集合运行中的程序不会重新读取App.config。如果用的是无参构造函数“nameMyDbEntities”即使你手动修改了App.config并调用ConfigurationManager.RefreshSectionEF内部对metadata的缓存也不是一次刷新就能清干净的。解决动态配置不要走App.config把连接参数存独立配置文件改完由代码组装新连接串传给DbContext的构造函数。注意每次修改后必须新创建DbContext实例上下文不能复用。一个检查技巧在输出窗口打印当前使用的连接串确认它来自配置文件而不是App.config。4.2 DatabaseFirst项目报“不支持关键字metadata”丢metadata的经典翻车现场现象带.edmx的EF6项目保存配置后创建上下文直接抛异常错误信息类似“不支持关键字metadata”或者“在配置中找不到指定名称的连接字符串”。原因把BuildSqlConnectionString的结果直接传给了带.edmx的DbContext构造函数。EF6的EDMX上下文期望的是EntityConnectionStringBuilder生成的完整串缺了metadatares://*...这段EF无法定位模型资源。解决见2.3使用BuildEntityConnectionString并确保Metadata字符串里的模型名与实际.edmx文件一致。我见过有人复制网上的代码metadata写成别的项目名结果在开发机上能跑模型文件恰好在同一目录被自动发现到客户机器上就崩。稳妥做法是把生成的entity连接串打印出来人工核对三个部分是否齐全。4.3 开发机好使客户机报找不到库文件路径别用Environment.CurrentDirectory现象本地调试一切正常打包安装到客户机器后报“尝试附加数据库文件失败”或“找不到文件”但配置文件里的路径看起来是对的。原因代码里用了Environment.CurrentDirectory拼数据库文件路径。WinForm程序在Visual Studio里调试时当前目录是bin\Debug和exe目录一致但安装到客户机器后用户从桌面快捷方式启动当前目录是快捷方式的工作目录跟exe所在目录不一致甚至可能装在Program Files下文件根本写不进去。解决所有文件路径统一用AppDomain.CurrentDomain.BaseDirectory拼接。附带数据库文件时不要把库文件直接放在安装目录里依赖写入首次启动时复制到ProgramData目录再使用见5.2。排查时可以临时在窗体标题栏显示当前路径确认实际取值。4.4 数据库文件被占用无法附加mdf二次启动的独占问题现象程序第一次启动能正常连接LocalDB重启程序后报“无法打开物理文件操作系统错误5”或“由于数据库正在使用无法获得独占访问”。原因SQL Server LocalDB对mdf文件有文件锁。程序退出时如果连接池没有完全释放进程虽退但LocalDB实例还挂着旧句柄或者你是先把文件复制再附加复制时文件正被上一次运行的服务占用。解决连接字符串里显式加User InstanceFalse并用SqlConnection.ClearAllPools()清理连接池。复制文件时用File.Copy覆盖前先尝试打开文件句柄确认没有进程占用。另一个常用做法是只在首次启动时做过一次“复制附加”后续启动直接连已有实例不再做附加动作。附加操作本身用SqlConnection执行CREATE DATABASE ... ATTACH语句不要依赖SQL Server Management Studio的图形界面操作因为交付现场没有这个工具。4.5 改了连接串还连旧库DbContext生命周期没管好现象配置窗体里确认服务器和库名都改了测试连接也通过保存后跑业务查询数据还是旧库的。原因代码里使用了静态字段或单例持有DbContext。EF上下文首次访问数据库时会初始化映射信息和连接如果这个实例在配置修改前已经创建它内部绑定的是旧连接。静态DbContext在WinForm程序里特别常见因为很多人图省事写了个DbHelper静态类。解决动态配置场景下DbContext严格按“用即建用完即释放”处理。底层做一个连接串读取方法每次创建上下文时都调用ConfigStore.Load()重新读配置文件避免缓存。同时检查代码里有没有静态的DbSet列表或缓存的ObjectContext这些都是隐藏连接点的来源。5. 附带数据库的收尾技巧文件路径、首次初始化与连接验证交付项目时“另附带数据库”通常指三种形态.mdf文件、SQLite单文件、初始化SQL脚本。SQLite零服务依赖但EF6需要第三方Provider.mdf配合LocalDB对WinForm最友好但路径和附加逻辑要处理好。我最终交付通常选“初始化脚本可选空库文件”双保险。5.1 数据库文件放进安装目录还是数据目录安装目录在Program Files下没有写权限库文件必须放到可写目录。首次启动时把附带库文件复制到C:\\ProgramData\\你的程序名\\之后LocalDB连接串用AttachDbFilename指向该目录var sql new SqlConnectionStringBuilder { DataSource (localdb)\MSSQLLocalDB, AttachDbFilename Path.Combine(dataDir, MyApp.mdf), IntegratedSecurity true, MultipleActiveResultSets true };5.2 首次启动初始化检测库是否存在不存在就执行脚本bool needInit !CanConnect(existingConnString); if (needInit) { CopyDatabaseToDataDir(); ExecuteSqlScript(Path.Combine(dataDir, init.sql)); }CanConnect里做一次超时很短的连接测试避免客户机器没装LocalDB时长时间卡住。初始化脚本里不要只建表还要把基础数据一起插进去否则客户打开程序看到空库会以为系统坏了。5.3 保存即验证把连接结果写进日志确认用的是新配置配置保存后立刻打开一个只读查询窗口做验证并把使用的连接串脱敏后写进日志文件。脱敏规则很简单密码替换成星号服务器和库名保留。这个习惯帮我排查过很多“为什么连错库”的远程求助日志直接告诉我们现场用的那台机器连的到底是哪台服务器。一条血泪经验配置页面上的“当前连接字符串”展示框不要省它看起来是给高级用户看的实际是排查时的最大后悔药。哪怕用户完全不懂电话求助时读一下这个框里的服务器名就能判断他填错了还是程序读错了。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

规则驱动代码评审:open-code-review 自动化实践全解析

规则驱动代码评审:open-code-review 自动化实践全解析

1. 从"在评论区找存在感"到"让工具替人盯细节"我在带团队做代码评审的时候,慢慢发现一个扎心的事实:评审的质量和数量,跟你用什么平台关系不大,跟你定了多少流程也没太大关系,真正决定评审效果的&…

2026/10/12 18:06:42 阅读更多 →
大模型API Key体系设计:身份、鉴权与计量全解析

大模型API Key体系设计:身份、鉴权与计量全解析

1. 为什么需要自己造一套大模型Key体系1.1 从共享Key的混乱说起我之前在某公司内部做模型开放平台的时候,最开始偷了个懒:直接申请了一个大模型供应商的密钥,把密钥写死在业务代码里,或者放在配置中心让大家共用。结果上线不到一周…

2026/10/12 18:06:42 阅读更多 →
SqlConverter:从Sql Server到SQLite的完整迁移指南

SqlConverter:从Sql Server到SQLite的完整迁移指南

简介:专门用于把 SQL Server 数据库迁移到 SQLite 的转换工具,需要具备基础的 C# 编译与数据库知识即可使用。它保留源库的表结构、索引、外键、视图与触发器,并转换业务数据,适合把服务端数据移植到本地轻量库、移动端或嵌入式环…

2026/10/12 18:06:42 阅读更多 →

最新新闻

VaR五种算法R实现:从历史模拟到Copula-GARCH全解析

VaR五种算法R实现:从历史模拟到Copula-GARCH全解析

简介:金融风险管理中,风险价值(VaR)是衡量投资组合潜在损失的核心指标。这份资料聚焦五种计算VaR的算法,重点利用DCC-GARCH模型与Copula-GARCH模型进行波动率与相依性建模,面向金融工程、量化风控方向的学生…

2026/10/12 22:30:07 阅读更多 →
Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

1. 为什么要在 Linux 上自建 Nacos 集群1.1 从单机到集群:一个绕不开的坎很多团队一开始用 Nacos 都是单机模式,图省事,下载解压启动就完事。开发环境跑得好好的,一到预发或者生产环境,问题就来了:服务注册…

2026/10/12 22:30:07 阅读更多 →
Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

最近这段时间一直在折腾持续集成这套东西,起因也很简单:某次发布新版本的时候,我手动打包、传服务器、重启服务,一步接一步,结果到了最后才发现漏了一个配置文件,整个流程又得从头来一遍。那天晚上我就在想…

2026/10/12 22:30:07 阅读更多 →
35kV三段式电流继电保护课程设计:整定计算与仿真全流程

35kV三段式电流继电保护课程设计:整定计算与仿真全流程

“35kV电力系统三段式电流继电保护课程设计仿真报告”,这句话我琢磨了好一阵子。电气专业的学生对这个题目应该都不陌生,它几乎是继电保护课程里绕不开的经典任务。很多人拿到这个题目之后的第一反应不是“我会不会算”,而是“我算这些东西到…

2026/10/12 22:30:07 阅读更多 →
豆瓣评论情感分析与词云实战:SnowNLP 中文 NLP 流水线

豆瓣评论情感分析与词云实战:SnowNLP 中文 NLP 流水线

简介:这份资源面向Python数据挖掘初学者与自然语言处理入门者,围绕豆瓣《肖申克的救赎》评论文本,演示如何调用SnowNLP库完成情感分析,并配合词云与分词处理,帮助读者建立从文本读取、中文分词到情感倾向判定的完整思路…

2026/10/12 22:30:07 阅读更多 →
flannel-v0.11.0 ARM64二进制包:Kubernetes边缘节点CNI确定性部署方案

flannel-v0.11.0 ARM64二进制包:Kubernetes边缘节点CNI确定性部署方案

简介:本资源为 Kubernetes 容器网络插件 Flannel 的 v0.11.0 版本官方二进制发行包,专为 ARM64 架构 Linux 系统编译,适用于在树莓派、国产 ARM 服务器或边缘计算节点上部署 K8s 集群的运维工程师与云原生开发者。压缩包共含 3 个核心文件&am…

2026/10/12 22:29:07 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →