gpt4 book ai didi

asp.net - 在 Asp.Net Core App 中访问 Web.config 设置?

转载 作者:行者123 更新时间:2023-12-02 09:39:36 24 4
gpt4 key购买 nike

我知道 asp.net core 有一个新的配置系统,它非常灵活,非常棒。但是我喜欢 .net 4.x 中基于 web.config 的配置系统。例如,可以在 web.config 文件中添加注释,因为它是一个 xml 文件。这对我来说值得坚持使用 xml 而不是使用 Shiny 的新 json 方法。 [ 更新:我现在明白 json 方法也支持文件中的注释。]

所以,如果我有一个针对完整框架的 Asp.Net Core Web 项目,我似乎应该能够使用基于 web.config 的 System.Configuration.ConfigurationManager.AppSettings[key]获取设置的方法。

但是当我尝试时,该值总是返回 null (至少在使用 VS2015 的 IIS express 中)。

它应该工作正常吗?对我可能过度关注的内容有任何想法吗?

网页配置

<configuration>
<appSettings>
<add key="SomeSetting" value="true"/>
</appSettings>

<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>

访问设置的代码:
string key = "SomeSetting";
string setting = ConfigurationManager.AppSettings[key];
if (setting == null)
throw new Exception("The required configuration key " + key + " is missing. ");

更新
经过更多研究,我现在明白为什么它不起作用,但我仍然没有找到解决它的方法。根本原因似乎是 ConfigurationManager 在不同的文件中而不是在 web.config 中查找配置信息。

这可以通过查看 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 来查看。属性(property)。在我的情况下,而不是指向 website_folder\web.config而是指向 website_folder\bin\Debug\net461\win7-x64\wwwGiftOasisResponsive.exe.Config其中 website_folder 是包含我的网站的文件夹的路径。

文档和智能感知说 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile是一个可设置的属性,但是当我尝试时,我发现设置它并不会改变它的值。很奇怪。

因此,虽然我现在看到问题所在,但我似乎无法找到解决问题的方法。

最佳答案

我找到了解决方案。弄清楚它的关键是意识到 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile属性不是指向 web.config 文件,而是指向运行网站的可执行文件的 exe.config 文件。请记住,在 .net core 下,网站运行在自己的进程中,并且有自己的 exe。

因此,.Net 4.x 与 ConfigurationManager 一起使用的配置模型更像是桌面应用程序,而不是 4.x Web 应用程序。我的意思是它正在查看 exe.config 而不是 web.config。

然后我注意到 Asp.Net Core Web 项目(使用完整的框架)包含一个 app.config 文件,很像桌面应用程序。事实证明,如果您将 .net 4.x 应用程序配置设置放在该文件中,它们将在生成 exe 时放置在 exe.config 文件中,无论是用于调试还是发布。例如,就像它与 win forms 应用程序一样。

因此,在面向完整框架的 asp.net 核心 Web 应用程序中使用 ConfigurationManager 的方法是将应用程序设置放在 app.config 文件中,而不是 web.config 文件中。 ConfigurationManager 会发现它们没有问题。

enter image description here

虽然这解释了很多,但它仍然没有提供将这些设置实际放入 web.config 并通过 ConfigurationManager 访问它们的能力。但是我开始相信在 asp.net 核心 Web 应用程序中这是不可能的,即使它针对的是完整的框架。

关于asp.net - 在 Asp.Net Core App 中访问 Web.config 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40186445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com