C#部署中DLL配置疑问:设置存储位置及是否编译进DLL
DLL配置设置的存储位置与编译逻辑解析
设置的实际存储位置
- 你用
Properties.Settings.Default.mysetting调用的配置,默认不会读取同目录的mydll.dll.config。.NET的配置系统是跟着主EXE走的,只会加载主程序的配置文件(比如yourapp.exe.config),DLL自带的配置文件默认不生效。 - 你现在改设置必须重编译,是因为你创建的是Application级别的设置——这类设置的值会直接编译进DLL的程序集资源里(嵌入在DLL的
.resources资源文件中),运行时优先读这里的内容,完全忽略你放的mydll.dll.config。
设置是否被编译进DLL
- Application级别设置:会被编译进DLL,部署后改
mydll.dll.config没用,必须重新编译DLL才能改值。 - User级别设置:不会编译进DLL,首次运行时默认值会写入用户专属的配置文件夹(比如
C:\Users\[你的用户名]\AppData\Local\[公司名]\[应用名]\[版本号]下的配置文件),后续修改直接改这个文件就行,不用重编译。
让DLL配置文件生效的方法
如果想让mydll.dll.config起作用,有两个可行方案:
- 把
mydll.dll.config里的配置节点(比如<appSettings>或<userSettings>)复制粘贴到主EXE的配置文件对应位置,DLL运行时会自动从EXE的配置文件读取这些值。 - 在DLL代码里手动加载自身的配置文件,示例代码:
var dllConfig = ConfigurationManager.OpenExeConfiguration(typeof(YourDllClass).Assembly.Location); var mySettingValue = dllConfig.AppSettings.Settings["mysetting"].Value;
内容的提问来源于stack exchange,提问作者user568551
相关产品推荐
相关产品推荐

