2014-08-30 29 views
1

读的app.config我的C#Windows应用程序的app.config中有以下的ConnectionStringConfigurationManager.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> 

安装设置后,相同的连接字符串中安装的projectname.config存在目录C:\ ProgramFiles \ ProjectName \ 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#中进行更改以从安装dircectory而不是从AppData文件夹读取正确的ProjectName.config文件。

回答

0

试试这个

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

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

} 
+0

是有办法,我可以删除应用程序。当我卸载应用程序时存储在appdata中的配置? – 2014-08-30 16:17:33

+0

你如何安装/卸载你的应用程序? – 2014-08-30 16:55:23

+0

使用在控制面板中添加或删除程序。引用第三方软件以从APPDATA删除app.config是不可接受的。 – 2014-08-30 16:58:30

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

+0

有没有办法,我可以删除app.config存储在appdata当我卸载应用程序? – 2014-08-30 16:17:50

+0

对路径进行硬编码可能不是一个好主意,因为每个系统都可能有独特的路径(基于操作系统) – 2014-08-30 17:08:03

+0

正确,处理该问题的一种方法是测试每个可能路径中是否存在文件。另一个将是测试操作系统版本。 – 2014-08-30 18:43:40