ConfigurationManager.ConnectionString从不同位置读取app.config

时间:2014-08-30 15:31:51

标签: c# winforms connection-string

我的C#windows应用程序的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#中进行更改以从安装目录读取正确的ProjectName.config文件,而不是从AppData文件夹中读取。

2 个答案:

答案 0 :(得分:0)

试试这个

 string theConfigFileName ="FilePath";
 ExeConfigurationFileMap userConfigFileMap = new ExeConfigurationFileMap() { ExeConfigFilename = theConfigFileName };
 Configuration userConfig = ConfigurationManager.OpenMappedExeConfiguration(userConfigFileMap, ConfigurationUserLevel.None);

foreach (var item in userConfig.ConnectionStrings.ConnectionStrings)
{

} 

答案 1 :(得分:0)

在应用启动时,您可以检查是否存在原始配置并将其删除。

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获取creating a custom action