Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在运行时而不是编译时从app.config获取设置吗?_C#_.net_App Config - Fatal编程技术网

C# 我可以在运行时而不是编译时从app.config获取设置吗?

C# 我可以在运行时而不是编译时从app.config获取设置吗?,c#,.net,app-config,C#,.net,App Config,我有许多项目需要访问设置、数据库连接、web api url、身份验证服务器url等,这些内容将根据其部署而改变 该应用程序可以多次部署到不同的部门,每个部门都有不同的数据库和Web服务器 最初,我使用appSettings并将其作为属性公开。这似乎通过ide在开发中起作用(Visual Studio 2013) 为了正确定位,我按照建议进行了操作,结果似乎奏效了。 所以最初我有: private static KeyValueConfigurationCollection GetAppSe

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

该应用程序可以多次部署到不同的部门,每个部门都有不同的数据库和Web服务器

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

为了正确定位,我按照建议进行了操作,结果似乎奏效了。 所以最初我有:

  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。 在搜索问题时,我发现现在建议使用项目属性。我这样做了-app.config中出现了一个新的ApplicationSettings部分,并且找到了属性。 因此,上述内容简化为:

setting = Properties.Settings.Default.AknowledgeSTSOrigin;
这非常有效,我将值设置为localhost以测试在ide中运行-一切正常。我编译并发布了应用程序,然后尝试在服务器上更改app.config。它仍然无法在服务器上工作。但是,如果我在我的机器上更改app.config以进行服务器设置,然后重新构建并发布它,它就会工作

因此,该方法似乎在编译时从app.config获取属性

我想做的是能够在运行时从配置文件中获取它们。因此,只需构建一次应用程序,部署多次,然后使用特定于部署的设置更新配置

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

尝试添加

 Properties.Settings.Default.Reload();
根据,但不起作用

目标框架=.NET4.5及其类库。错误消息显示它仍然在编译时从配置文件中获取值。(错误消息不相关,因为如果它有正确的路径,则不会出现错误)

编辑: 现在变得更加困惑。找到以下内容,其中提到除非将GenerateDefaultValueInCode设置为false,否则默认值是要编译的属性。我已经这样做了,现在返回到与属性返回null相同的结果。出于某种原因,尽管将所有属性的值都设置为false,但这些属性仍然嵌入在dll中可见。

找到了它! 问题发生在类库中。 虽然我在类库中创建了这些设置,并将这些设置添加到app.config中,但它实际上并没有在那里检索它们。相反,它是使用类库的父级的web.config。 我将设置放在web.config中,它似乎可以工作。

找到了! 问题发生在类库中。 虽然我在类库中创建了这些设置,并将这些设置添加到app.config中,但它实际上并没有在那里检索它们。相反,它是使用类库的父级的web.config。
我将设置放在web.config中,它似乎可以工作。

app.config设置在应用程序启动时被读取到内存中。你可以100%更改应用程序配置设置,无需重新编译。我已经做过很多次了。在IIS托管的应用程序中,应用程序池应自动回收,但响应可能会被缓存。为了安全起见,请手动重新启动应用程序池。Windows服务和其他应用程序可能需要重新启动too@ste-我已经回收了应用程序池,重新启动了应用程序,甚至重新启动了服务器。我有两台服务器-名称相同。部署到我编译时所针对的版本-效果很好。部署到另一个-不从配置中获取设置。您正在编辑的.config文件的名称是什么?是不是yourAppliationName.exe.config而不是app.config?应用程序启动时,app.config设置会读入内存。你可以100%更改应用程序配置设置,无需重新编译。我已经做过很多次了。在IIS托管的应用程序中,应用程序池应自动回收,但响应可能会被缓存。为了安全起见,请手动重新启动应用程序池。Windows服务和其他应用程序可能需要重新启动too@ste-我已经回收了应用程序池,重新启动了应用程序,甚至重新启动了服务器。我有两台服务器-名称相同。部署到我编译时所针对的版本-效果很好。部署到另一个-不从配置中获取设置。您正在编辑的.config文件的名称是什么?是不是你的appliacationname.exe.config而不是app.config?