代码之家  ›  专栏  ›  技术社区  ›  SteveL

我可以从应用程序中获取设置吗。在运行时而不是编译时配置?

  •  1
  • SteveL  · 技术社区  · 7 年前

    我有许多项目需要访问设置、数据库连接、web api url、身份验证服务器url等,这些内容将根据其部署而变化。

    最初,我使用appSettings并将其作为属性公开。这似乎可以通过ide进行开发(Visual Studio 2013)。

    我听从了建议 here 所以最初我有:

      private static KeyValueConfigurationCollection GetAppSettings()
        {
            // The dllPath can't just use Assembly.GetExecutingAssembly().Location as ASP.NET doesn't copy the config to shadow copy path
            var dllPath = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath;
            var dllConfig = ConfigurationManager.OpenExeConfiguration(dllPath);
    
            // Get the appSettings section
            var appSettings = (AppSettingsSection)dllConfig.GetSection("appSettings");
            return appSettings.Settings;
        }
    
     public string AknowledgeSTSOrigin
            {
                get
                {
                    string setting;
                    if (_aknowledgeSTSOrigin != null)
                    {
                        setting = _aknowledgeSTSOrigin;
                    }
                    else
                    {
                        if (System.Diagnostics.Debugger.IsAttached)
                        {
                            setting = "https://localhost:44333";
                        }
                        else
                        {
                            var settings = GetAppSettings();
                            if (settings.Count > 0)
                            {
                                setting = settings["AknowledgeSTSOrigin"].Value;
                            }
                            else
                            {
                                setting = System.Configuration.ConfigurationManager.AppSettings["AknowledgeSTSOrigin"];
                            }
                        }
                         _aknowledgeSTSOrigin =setting;
                    }
                    return setting;
                }
            }
    

    有时它停止了工作,但不幸的是,我不知道什么时候或者为什么,因为我在ide中运行,所以它总是默认为调试器附加的条件。 此时的问题是,上述所有路由都从appSettings返回null。 在搜索问题时,我发现现在建议使用项目属性。我这样做了——应用程序中出现了一个新的应用程序设置部分。已找到配置和属性。 因此,上述内容简化为:

    setting = Properties.Settings.Default.AknowledgeSTSOrigin;
    

    因此,该方法似乎从应用程序获取属性。编译时配置。

    我试着在谷歌上搜索这个并进行检查,但没有发现任何有用的东西。

    已尝试添加

     Properties.Settings.Default.Reload();
    

    根据 this post 但不起作用。

    现在变得更加困惑。找到以下内容 post

    1 回复  |  直到 7 年前
        1
  •  0
  •   SteveL    7 年前

    找到了! 问题发生在类库中。 虽然我在类库中创建了设置,并且这些设置被添加到了应用程序中。配置,它实际上并没有在那里检索它们。取而代之的是网络。使用类库的父级的配置。