外部 AppSettings 文件与 web.config 文件未合并
外部 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中的不起作用的键的下方时,它们看起来是相同的。我希望在配置文件合并错误的情况下有某种方法来抛出错误?
问题出现的原因是在使用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值。
问题原因:当使用外部的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"设置解决了我的问题,谢谢。
问题原因:外部的app.config文件没有与web.config文件合并。
解决方法:
1. 确保外部的app.config文件与web.config文件在同一个目录下。
2. 在web.config文件中使用
3. 在需要读取配置的代码中,使用ConfigurationManager.AppSettings["key"]来获取配置值。
在这个问题中,我们遇到了外部的app.config文件没有与web.config文件合并的问题。通过一个简单的项目,我们确认了外部的app.config文件是有效的。
在app.config文件中,我们定义了两个配置项testAppConfigString和testOverrideString。在web.config文件中,我们使用
在Default.aspx.cs文件中,我们在Page_Load事件中使用ConfigurationManager.AppSettings["key"]来获取配置项的值,并将其显示在页面上。
但是,实际运行的结果却不符合预期。页面上显示的文本与预期的不一致。经过排查,我们发现问题出在外部的app.config文件没有与web.config文件合并。
为了解决这个问题,我们需要采取以下步骤:
1. 确保外部的app.config文件与web.config文件在同一个目录下。
2. 在web.config文件中使用
3. 在需要读取配置的代码中,使用ConfigurationManager.AppSettings["key"]来获取配置值。
这样,我们就能够正确地读取外部的app.config文件,并将其与web.config文件合并,从而得到预期的结果。
通过以上的解决方法,我们成功解决了外部app.config文件没有与web.config文件合并的问题。这个问题的出现可能是因为外部的app.config文件没有正确配置或者与web.config文件的路径不匹配。通过确保路径正确并合理使用