打开“任务计划程序”(taskschd.msc)
点击右侧“创建任务”
填写“名称”
“安全选项”根据实际情况设置
如果选择“不管用户是否登录都要运行”,则启动成功后不会显示窗口(任务管理器中可见进程)
如果选择“只在用户登录时运行”启动成功后会显示窗口,但系统重启后需要进入系统才能运行此计划
“触发器”新建,勾选“重复任务间隔”选最短,“持续时间”无限期,并取消“任务的执行时间超过此值则停止执行”
“操作”新建,启动程序,浏览程序或脚本
“设置”请勿启动新实例(只判断它启动的实例,不判断手动打开的或开机启动的实例),其它选项按需设置
设置完成

打开 .csproj 项目文件,在 <PropertyGroup> 标签内添加:
<Version> 1.0 .$([System.Math]::Floor($([System.DateTime]::Now.Subtract($([System.DateTime]::Parse('2000-01-01T00:00:00Z'))).TotalDays))) .$([MSBuild]::Divide($([System.Math]::Floor($([System.DateTime]::Now.TimeOfDay.TotalSeconds))), 2)) </Version>
最终生成的版本号示例: 1.0.9238.28518
其中,Major 与 Minor 是固定的,Build 是2000年1月1日至今的天数,Revision 是今天的秒数 / 2 所得的值。(为了防止数值超过 65535)
程序中获取版本号:
var version = Assembly.GetExecutingAssembly().GetName().Version!; // 当前类库 var version = Assembly.GetEntryAssembly()?.GetName().Version!; // 入口项目
从版本号获取发布时间:
DateTime versionTime = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);

在解决方案资源管理器中找到 Properties/AssemblyInfo.cs 文件。该文件存放程序集版本信息。
修改版本号格式
将以下代码片段中的 AssemblyVersion 改为使用星号通配符(建议保留主版本和次版本号):
[assembly: AssemblyVersion("1.0.*")] // 自动生成构建号和修订号 // [assembly: AssemblyFileVersion("1.0.0.0")] // 注释或删除此行
关闭确定性构建
用文本编辑器打开 .csproj 项目文件,在 <PropertyGroup> 标签内添加:
<Deterministic>false</Deterministic>
此设置允许 MSBuild 生成动态版本号。
最终生成的版本号示例: 1.0.9238.28518
其中,Major 与 Minor 是固定的,Build 是2000年1月1日至今的天数,Revision 是今天的秒数 / 2 所得的值。(为了防止数值超过 65535)
程序中获取版本号:
var version = Assembly.GetExecutingAssembly().GetName().Version;
从版本号获取发布时间:
DateTime versionTime = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);
查看 .NET Core / .NET 5+ 实现自动版本号的方法

通常,我们在更新一条数据库记录时,EF 先取出这一条记录:
var log = DbContext.MyTable.Find(id);
然后赋值字段并保存:
log.Result = "OK"; DbContext.SaveChanges();
这样就会产生两次数据库查询。
我们尝试用 Attach 方法。
先创建一个仅包含主键的对象:
var log = new MyTable { Id = id };
将对象附加到上下文:
DbContext.MyTable.Attach(log);
然后更新需要更新的字段:
log.Result = "OK"; DbContext.SaveChanges();
这样,能在保留其它字段值的前提下,减少一次数据库查询。
但是需要注意的是:
当某非 null 字段需要恢复默认值时,EF 会忽略这个更改。(可能会因 EF 版本等原因有不同的结论)
举个例子:
某记录有个 int 型字段 a,在数据库中这个记录的 a 的值为 1,但 C# 中 int 型的默认值为 0,所以当 Attach 附加这个对象后,如果重新设置 log.a 为 0,那么保存后 a 的值仍为 1。
还有一种写法,利用 ExecuteUpdate 方法:
var affectedRows = DbContext.MyTable .Where(c => c.Id == id) .ExecuteUpdate(setters => setters .SetProperty(c => c.Result, "OK") );
返回匹配的行数。
这种写法不会遇到“恢复为默认值不生效”的问题,推荐使用。

数据库 | 数据类型 | 收费情况 | 调用方式 | 数据来源 | 资料 |
Tushare Pro | 股票、指数、公募、期货、期权、债券、外汇、港股、美股…… | 免费 / 收费 | Web API / Python / Matlab / R | 通过社区的采集和整理存入数据库经过质量控制后再提供给用户 | 积分 / 文档 |
麦蕊智数 | 沪深股票基础数据、实时交易数据、指数数据 | 免费 / 收费 | Web API | licence / 文档 | |
ig507 | 沪深股票基础数据、实时交易数据、指数数据、基金数据 | 免费 / 收费 | Web API | licence / 文档 | |
AkShare | 股票、期货、债券、期权、外汇、货币、指数…… | 免费开源 | Python / Anaconda / R / MATLAB / 本地 Web API | 基于爬虫技术从大型财经网站抓取公开数据 | 文档 / AKTools |
BaoStock | 仅提供历史数据(如日线、周线),无实时行情 | 免费开源 | 本地调用 Python API | 数据来源为交易所或合作机构的标准化接口 | 文档 |

Tea.TeaException:“code: 400, Specified parameter Version is not valid. request id: ”
可能是 AlibabaCloud.OpenApiClient.Models.Config 的 Endpoint 配置错误。
Tea.TeaException:“code: 400, The parameter IpProtocol must be specified with case insensitive TCP, UDP, ICMP, GRE or All. request id: ”
必须指定 Permissions 参数。参考文档
Tea.TeaException:“code: 403, User not authorized to operate on the specified resource, or this API doesn't support RAM. request id: ”
前往 RAM 访问控制配置用户的权限。
Tea.TeaException:“code: 401, The specified security group is not authorized to operate. request id: ”
没有权限操作当前安全组。或者检查安全组的实例 ID 是否正确。
本文不定期更新。

命令提示符
打开记事本,粘贴下方命令,保存为 .bat 文件
@echo off iisreset pause
命令提示符(管理员)
打开记事本,粘贴下方命令,保存为 .bat 文件
@echo off if not "%1"=="admin" (powershell start -verb runas '%0' admin & exit) iisreset pause
PowerShell
创建一个快捷方式,目标为
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "Start-Process PowerShell -ArgumentList 'iisreset' -Verb RunAs"

一般地,在路由器上启用 UPnP 就可以了。
如果局域网中有多台监控设备,或有多层局域网,可以尝试直接端口映射。
在监控控制面板中查看主机 IP(注意不是各通道的 IP),或者在同一层局域网通过电脑浏览器中访问监控控制面板(http://主机ip)。
然后就可以在路由器上配置端口映射了(有些路由器的菜单项为“NAT 服务”)。
一般配置 554(RTSP 端口)和 8000(服务端口)就可以了,80(HTTP 端口)和 443(HTTPS 端口)用于通过浏览器管理监控系统,不需要在外网配置的话不需要映射,暴露在公网有安全风险。另外 9010(平台命令端口)和 9020(平台数据端口)作用未知,可不映射。
当然,为了防止端口冲突或提高安全性,映射的外部端口和内部端口可以不相同。

如果用后端代码实现,必须替换 \r\n、\r、\n 这些换行符为 <br />。
这时,如果前端绑定时是自动编码的,那么 <br /> 会直接显示出来,起不到换行效果。
如果前端绑定时是原文输出的,那么当数据源不可信时会引发 XSS 漏洞。
推荐一个既简单又安全的方法,用前端的 CSS 就能轻松实现:
<div style="white-space: pre-line">内容</div>
原理:CSS 的 white-space: pre-line 属性会保留换行符(\r\n或\n),自动渲染为可视换行,无需修改数据源且无安全风险。

大模型文件一般都比较大,Ollama 默认是下载到 C 盘的,如何更改到 D 盘或其它盘符中?
第一步,退出 Ollama。
第二步,设置环境变量,设置方法参这篇文章:
变量名:OLLAMA_MODELS 变量值:D:\.ollama\models(这是示例,填写自己的实际路径即可)
第三步,将默认路径下的 models 目录移至 D:\.ollama\
默认路径一般为 C:\Users\<用户>\.ollama\
