【问题标题】:ConfigurationManager.ConnectionString reads app.config from different locationConfigurationManager.ConnectionString 从不同位置读取 app.config
【发布时间】:2014-08-30 15:31:51
【问题描述】:

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

【问题讨论】:

    标签: c# winforms connection-string


    【解决方案1】:

    试试这个

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

    【讨论】:

    • 有没有办法在我卸载应用程序时删除存储在 appdata 中的 app.config?
    • 在控制面板中使用添加或删除程序。参考 3rd 方软件从 APPDATA 中删除 app.config 是不可接受的 :)
    • 将安装程序类添加到您的项目中。检查汤姆·斯图迪答案的链接
    • 我已经在项目解决方案中创建了设置部署项目。我构建它,它会给我 projectname.setup.msi。我双击并安装它
    【解决方案2】:

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

    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");
    

    查看creating a custom action的msdn

    【讨论】:

    • 有没有办法在我卸载应用程序时删除存储在 appdata 中的 app.config?
    • 硬编码路径可能不是一个好主意,因为每个系统可能有唯一的路径(基于操作系统)
    • 是的,处理这种情况的一种方法是测试每个可能路径中是否存在文件。另一个是测试操作系统版本。
    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 2013-01-09
    • 2019-09-20
    • 1970-01-01
    • 2023-04-08
    • 2011-06-30
    • 2020-06-01
    相关资源
    最近更新 更多