以下映射文件,然后将其作为 System.Configuration 变量打开:
string FilePath = System.Reflection.Assembly.GetAssembly(typeof(EncryptDecryptViewModel)).Location
FilePath += @".config";
var ConfigFileMap = new ExeConfigurationFileMap();
ConfigFileMap.ExeConfigFilename = FilePath;
Configuration LocalConfigurationManager = ConfigurationManager.OpenMappedExeConfiguration(ConfigFileMap, ConfigurationUserLevel.None);
您现在可以像通过配置管理器一样从程序集配置文件中检索值,但是您的请求必须更加明确。
使用 System.Configuration.ConfigurationManager 时,以下内容有效并返回值:
string s = System.Configuration.ConfigurationManager.AppSettings["SomeSetting"];
但是,当使用 Configuration 变量 LocalConfigurationManager(来自上面的代码)时,调用类似于普通的 ConfigurationManager 调用,例如:
string s = LocalConfigurationManager.AppSettings["ConfigurationSections"];
当您尝试运行代码时,您会收到以下错误:
'System.Configuration.ConfigurationElement.this[System.Configuration.ConfigurationProperty]' 是
由于其保护级别而无法访问
这是因为在 ConfigurationManager 中,AppSettings 属性是一个 NameValueCollection。在 Configuration 变量中,AppSettings 实际上是一个 System.Configuration.AppSettingsSection,其中包含一个名为 Settings 的属性,它是一个 KeyValueConfigurationCollection,因此要访问该属性,调用将如下所示:
string s = LocalConfigurationManager.AppSettings.Settings["SomeSetting"].Value;
对于连接字符串部分,将使用以下语法
string ConnectionString = LocalConfigurationManager.ConnectionStrings.ConnectionStrings["connectionStringName"].ConnectionString;