2014-08-30 28 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