ConfigurationManager.ConnectionString从不同位置读取app.config
本文关键字:读取 app config 位置 ConnectionString ConfigurationManager | 更新日期: 2023-09-27 18:20:08
我的C#窗口应用程序的app.config具有以下ConnectionString
<connectionStrings>
<add name="DS1" connectionString="Data Source=DataSource1;" providerName="" />
<add name="DS2" connectionString="Data Source=DataSource2;" providerName="" />
<add name="DS3" connectionString="Data Source=DataSource3;" providerName="" />
<add name="DS4" connectionString="Data Source=DataSource4;" providerName="" />
</connectionStrings>
安装安装程序后,安装目录C:''ProgramFiles''projectname''projectname.config的projectname.config中存在相同的连接字符串。
当我运行应用程序时,我有以下代码来访问连接字符串
foreach (ConnectionStringSettings key in ConfigurationManager.ConnectionStrings)
{
Display ConfigurationManager.ConnectionStrings[key.Name].Name,
}
密钥名称未显示为DS1、DS2、DS3和DS4。
相反,它正在读取中的ProjectName.config文件
C:'Users'UserName'AppData'Local'VirtualStore'Program Files'ProjectName'ProjectName.exe.config
这在项目安装时保存了很长时间,但在卸载时不会被删除。
我如何在C#中进行更改,以便从安装目录而不是AppData文件夹中读取正确的ProjectName.config文件。
试试这个
string theConfigFileName ="FilePath";
ExeConfigurationFileMap userConfigFileMap = new ExeConfigurationFileMap() { ExeConfigFilename = theConfigFileName };
Configuration userConfig = ConfigurationManager.OpenMappedExeConfiguration(userConfigFileMap, ConfigurationUserLevel.None);
foreach (var item in userConfig.ConnectionStrings.ConnectionStrings)
{
}
在应用程序启动时,您可以检查原始配置的存在并将其删除。
string originalConfig = string.Format("C:'Users'{0}'AppData'Local'VirtualStore'Program Files'ProjectName'ProjectName.exe.config", Environment.UserName);
if (System.IO.File.Exists(originalConfig))
{
System.IO.File.Delete(originalConfig);
}
如果你想在卸载过程中执行,你可以在自定义操作中执行以下代码:
System.IO.Directory.Delete("%APPDATA%'ProjectName");
请参阅msdn以创建自定义操作