You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BricsCAD环境下.Net DLL调用Properties.Settings.Save()的用户配置存储位置查询

问题:CAD插件DLL调用Settings.Save()后生成的用户配置文件存储位置

我的C# DLL项目使用了settings机制,默认值自动存储在xxx.dll.config文件中。

当我执行设置保存操作时:

Properties.Settings.Default.Save();

后续打开表单时可以正确回读这些设置,但我无法找到用户保存版本的配置文件的存储路径,我已经检查过%localappdata%目录,没有找到对应文件。

背景汇总

  1. 该.Net DLL工具是在BricsCAD内部运行的。
  2. 我们使用的是Properties.Settings机制实现配置管理。
  3. 请问用户调用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即可得到当前环境下的配置文件绝对路径

常见疑问说明

  1. 为什么DLL目录下的xxx.dll.config没有被修改?
    这个文件是应用程序级的默认配置文件,仅用于存储初始默认值,运行时的用户修改不会写入这个文件,只会写入上面提到的用户目录下的user.config。
  2. 为什么在%LOCALAPPDATA%下搜不到对应文件?
    你需要搜索对应CAD主程序的发行商文件夹,比如AutoCAD对应Autodesk文件夹、BricsCAD对应Bricsys文件夹、ZWCAD对应中望软件相关文件夹,不要搜索你自己开发的DLL的名称。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:27:03