BricsCAD环境下.Net DLL调用Properties.Settings.Save()的用户配置存储位置查询
问题:CAD插件DLL调用Settings.Save()后生成的用户配置文件存储位置
我的C# DLL项目使用了settings机制,默认值自动存储在xxx.dll.config文件中。
当我执行设置保存操作时:
Properties.Settings.Default.Save();
后续打开表单时可以正确回读这些设置,但我无法找到用户保存版本的配置文件的存储路径,我已经检查过%localappdata%目录,没有找到对应文件。
背景汇总
- 该.Net DLL工具是在BricsCAD内部运行的。
- 我们使用的是
Properties.Settings机制实现配置管理。 - 请问用户调用
Save()方法生成的配置文件实际存储在什么位置?
补充更新
我找到了和该问题最相关的讨论帖(针对AutoCAD场景),该内容同样适用,因为我的工具可在三类CAD软件中运行:
- AutoCAD
- BricsCAD
- ZWCAD
但上述讨论并未给出明确答案。可以确定配置确实已持久化存储,但并未保存在我工具对应的%localappdata%目录下,我在BricsCAD和ZWCAD环境下都进行了测试,均未找到对应配置文件。
根据官方文档说明,配置文件应该会被更新,但DLL所在目录下的配置文件没有发生变化,虽然配置读写机制正常运行,但持久化的配置存储在其他位置。
回答
配置文件实际存储路径
.NET Framework的Properties.Settings机制的用户级配置存储路径和当前运行的主宿主进程绑定,而非你开发的DLL绑定,你找不到的原因是你一直在按DLL的信息搜索,实际路径规则如下:
%LOCALAPPDATA%\[CAD软件发行商名称]\[CAD主程序名].exe_Url_[随机生成的哈希字符串]\[CAD程序版本号]\user.config
举个BricsCAD场景的参考路径:%LOCALAPPDATA%\Bricsys\bricscad.exe_Url_xxxx随机哈希xxxx\23.2.0.0\user.config
快速获取准确路径的方法
不需要手动遍历文件夹,你可以直接在DLL代码中通过反射读取Settings的私有属性,直接拿到实际存储的完整路径:
var settings = Properties.Settings.Default; string localConfigPath = (string)settings.GetType() .GetProperty("LocalConfigPath", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) .GetValue(settings); // 输出localConfigPath即可得到当前环境下的配置文件绝对路径
常见疑问说明
- 为什么DLL目录下的
xxx.dll.config没有被修改?
这个文件是应用程序级的默认配置文件,仅用于存储初始默认值,运行时的用户修改不会写入这个文件,只会写入上面提到的用户目录下的user.config。 - 为什么在
%LOCALAPPDATA%下搜不到对应文件?
你需要搜索对应CAD主程序的发行商文件夹,比如AutoCAD对应Autodesk文件夹、BricsCAD对应Bricsys文件夹、ZWCAD对应中望软件相关文件夹,不要搜索你自己开发的DLL的名称。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

