外部 AppSettings 文件与 web.config 文件未合并

7 浏览
0 Comments

外部 AppSettings 文件与 web.config 文件未合并

在我的应用程序中,我有一个带有appSettings部分的web.config文件。appSettings部分包含应用程序使用的一些键。appSettings部分还包含file="AppSettings.config"属性。然后,AppSettings.config文件包含主要web.config中的一部分值。想法是让web.config包含所有基本/默认设置,并在AppSettings.config文件中提供对默认设置的覆盖。

根据这篇帖子(https://stackoverflow.com/a/6940086/216160),我的设置应该起作用(特别是:将在.config文件中合并(并覆盖)设置)。

我遇到的问题是它不起作用。我有一个默认值为false,然后驱动一些关于显示一些测试版报告功能(或不显示)的逻辑,并将AppSettings.config设置为覆盖此键为'true'。可悲的是,它仍然隐藏了报告系统。但是,如果我更改web.config的值,那么该项将显示。

可能AppSettings没有被合并吗?我如何测试/证明实际发生了什么?

编辑

似乎AppSettings.config文件中存在某种错误。当一切都按预期工作时,合并正如预期发生。然而,我仍然有一个问题,即如何检测AppSettings.config文件是否存在某种问题。我已经测试过文件是否是有效的XML(是的),但是问题仍然存在。当我从web.config中复制功能键,并将其粘贴到AppSettings.config中的不起作用的键的下方时,它们看起来是相同的。我希望在配置文件合并错误的情况下有某种方法来抛出错误?

0
0 Comments

问题出现的原因是在使用WebConfigurationManager.OpenWebConfiguration方法时,传入的参数路径不被允许。

解决方法是使用WebConfigurationManager.OpenMappedWebConfiguration方法,并在参数中指定虚拟路径的映射路径。

具体解决方法如下:

1. 添加以下命名空间引用:

using System.Web.Configuration;

2. 使用WebConfigurationManager.OpenMappedWebConfiguration方法来打开配置文件。在参数中指定虚拟路径的映射路径。

var virtualPath = "~/SomeProjectFolder/Environment/";
var physicalPath = HttpContext.Current.Server.MapPath(virtualPath);
var configMap = new ExeConfigurationFileMap { ExeConfigFilename = physicalPath };
var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
string username = config.AppSettings.Settings["username"].Value;

通过以上步骤,你可以成功访问外部的配置文件,并获取到相应的appSettings值。

0
0 Comments

问题原因:当使用外部的AppSettings文件时,可能会出现该文件没有与web.config文件合并的情况。可能的原因是由于解决方案文件夹中的/bin和/obj目录中的缓存文件未正确清除。

解决方法:

1. 显式删除解决方案文件夹中的/bin和/obj目录。

2. 执行一次重建(rebuild)操作。

3. 确保外部配置文件的文件属性设置为'Copy Always'。否则,它将不会存在于运行应用程序所在的bin目录中。

4. 在解决方案资源管理器中右键单击文件,选择设置,然后将复制本地设置设置为'Copy Always'或'When Newer'。

5. 'Copy Always'设置解决了我的问题,谢谢。

6. 感谢您推荐检查构建操作,您刚刚拯救了我头上的一些头发。

7. "Copy Always"设置解决了我的问题,谢谢。

0
0 Comments

问题原因:外部的app.config文件没有与web.config文件合并。

解决方法:

1. 确保外部的app.config文件与web.config文件在同一个目录下。

2. 在web.config文件中使用标签,并使用file属性指定外部的app.config文件。

3. 在需要读取配置的代码中,使用ConfigurationManager.AppSettings["key"]来获取配置值。

在这个问题中,我们遇到了外部的app.config文件没有与web.config文件合并的问题。通过一个简单的项目,我们确认了外部的app.config文件是有效的。

在app.config文件中,我们定义了两个配置项testAppConfigString和testOverrideString。在web.config文件中,我们使用标签,并通过file属性指定了外部的app.config文件。同时,在Default.aspx页面中,我们使用控件来显示配置项的值。

在Default.aspx.cs文件中,我们在Page_Load事件中使用ConfigurationManager.AppSettings["key"]来获取配置项的值,并将其显示在页面上。

但是,实际运行的结果却不符合预期。页面上显示的文本与预期的不一致。经过排查,我们发现问题出在外部的app.config文件没有与web.config文件合并。

为了解决这个问题,我们需要采取以下步骤:

1. 确保外部的app.config文件与web.config文件在同一个目录下。

2. 在web.config文件中使用标签,并使用file属性指定外部的app.config文件。

3. 在需要读取配置的代码中,使用ConfigurationManager.AppSettings["key"]来获取配置值。

这样,我们就能够正确地读取外部的app.config文件,并将其与web.config文件合并,从而得到预期的结果。

通过以上的解决方法,我们成功解决了外部app.config文件没有与web.config文件合并的问题。这个问题的出现可能是因为外部的app.config文件没有正确配置或者与web.config文件的路径不匹配。通过确保路径正确并合理使用标签,我们能够正确地读取外部的配置文件,并将其与web.config文件合并,从而得到预期的结果。

0