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文件。

ConfigurationManager.ConnectionString从不同位置读取app.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以创建自定义操作