【问题标题】:Where have my config settings gone?我的配置设置到哪里去了?
【发布时间】:2015-02-17 11:18:14
【问题描述】:

在经历了一些冗长而复杂的故事之后,我发现了与此非常相似的代码,并且已经使用它好几个月了。昨天我改变了很多东西,现在这段代码不再工作了。

public void OpenConfig(string configDir)
{
    if (string.IsNullOrWhiteSpace(configDir))
    {
        configDir = AppDomain.CurrentDomain.BaseDirectory;
    }
    var sharedConfigPath = Path.Combine(configDir, ConfigFileName);
    var map = new ExeConfigurationFileMap { ExeConfigFilename = sharedConfigPath };
    sharedConfig = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
    logger.Trace("'{0}' set 'SharedConfigPath' to '{1}'.", GetType().Name, sharedConfig.FilePath);
}

然后,我得到这样的配置值:

ServicePollingInterval = GetIntegerAppSetting("ServicePollingInterval"),

在哪里

private static int GetIntegerAppSetting(string settingName, bool throwOnMissing = false)
{
    string setting = null;
    if (settingTag != null)
    var settingTag = sharedConfig.AppSettings.Settings[settingName];
    {
        setting = settingTag.Value;
    }
    if (setting == null)
    {
        if (throwOnMissing)
        {
            logger.Trace("App Setting '{0}' not configured. Throwing an exception.", settingName);
            throw new EalsConfigurationException(settingName, "App Setting not configured.");
        }
        logger.Trace("App Setting '{0}' not configured. Defaulting to -1.", settingName);
        return -1;
    }

    int i;
    if (!int.TryParse(setting, out i))
    {
        logger.Trace("App Setting '{0}' not valid as Integer. Throwing an exception.", settingName);
        throw new EalsConfigurationException(setting, "App Setting '{0}' not valid as Integer.");
    }
    return i;
}

但是,现在基本上在一夜之间,调用var settingTag = sharedConfig.AppSettings.Settings[settingName]; 将settingTag 返回为空,因为该集合中没有appSettings 项。

我已经在这个项目上工作了几个月,我把这个配置代码放在一开始,因为我有几个可执行文件在同一个文件夹中运行,我希望它们都使用相同的配置。我真的很难过(并不惊讶)我没有对配置进行任何令人难忘的代码更改。

谁能看到我可能搞砸了什么,或者猜猜我可能改变了哪些外部影响,或者任何可能突然导致Configuration 对象的所有部分都为空的事情。

我怀疑但无法追踪的一个怀疑是,该应用运行的用户身份发生了变化。这很复杂:我有一个托管在 Windows 服务中的 WCF 服务,由 WPF 应用程序使用。

【问题讨论】:

    标签: wpf wcf configuration windows-services shared-config


    【解决方案1】:

    反复试验已经揭示了某种答案。在使用单独的 WCF 库、主机和客户端项目进行编码和调试时,您需要在所有三个项目中使用相同的配置设置。有时 VS2013(我不知道其他人)会在某处某个未知进程中自动托管 WCF 库,因此您需要库项目中 app.config 的副本,即使它不是可执行文件。

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2022-10-13
      • 2011-01-18
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多