我理解asp.net core有一个非常灵活的新配置系统,这非常棒.但我喜欢网络的某些方面.基于配置的配置系统.第四网.x、 例如,人们可以在网上发表 comments .配置文件,因为它是xml文件.对我来说,坚持使用xml而不是使用shiny 的新json方法是值得的.[Update:我现在知道json方法也支持文件中的注释.]

因此,如果我有一个以整个框架为目标的ASP.NET Core Web项目,我似乎应该能够使用基于web.config的System.Configuration.ConfigurationManager.AppSettings[key]方法来获取设置.

但当我try 时,该值总是返回null(至少在使用VS2015的IIS express中是这样).

它应该能正常工作吗?有没有想过我可能看过头了?

Web.config

<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. ");

UPDATE

这可以通过查看AppDomain.CurrentDomain.SetupInformation.ConfigurationFile处房产来看出.在我的例子中,它没有指向website_folder\web.config,而是指向website_folder\bin\Debug\net461\win7-x64\wwwGiftOasisResponsive.exe.Config,其中WebSite_Folder是包含我的网站的文件夹的路径.

文档和intellisense说AppDomain.CurrentDomain.SetupInformation.ConfigurationFile是一个可设置的属性,但当我try 设置时,我发现它不会改变它的值.很奇怪.

所以,虽然我现在明白了问题所在,但我似乎找不到解决问题的方法.

推荐答案

我好像找到了解决办法.弄清楚这一点的关键是要意识到AppDomain.CurrentDomain.SetupInformation.ConfigurationFile属性并不指向web.config文件,而是指向运行网站的可执行文件的exe.config文件.请记住,在.Net核心下,网站在其自己的进程中运行,并且它有自己的exe.

配置模型就是这样.第四网.与ConfigurationManager一起使用的x更像是桌面应用程序,而不是4.x网络应用程序.我的意思是它在看exe.而不是网络.配置.

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

因此,在asp中使用ConfigurationManager的方法.net核心web应用程序的目标是将应用程序设置放在应用程序中.配置文件,而不是web.配置文件.ConfigurationManager会发现他们没有问题.

enter image description here

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

Asp.net相关问答推荐

在Docker Windows中,ASP.NET核心容器在自定义端口8080上运行,但ASP.NET容器在固定端口80上运行

$(document).ready 不工作

DBSet 不包含 Where 的定义

WebResource.axd 上的填充无效且无法删除异常

如何在现有数据库中创建 ASP.Net Identity 表?

如何注册路由区域

如何在 ASP.NET 全球化中配置不变文化?

Server.Transfer 在执行子请求时抛出错误.如何解决?

ASP.NET 如何将控件呈现为 HTML?

.NET 站点如何隐藏其文件的 .aspx 扩展名?

未知的网络方法.参数名称:methodName

控制器 SessionStateBehavior 是只读的,我可以更新会话变量

使用 JavaScript 更改 ASP.NET 标签的可见性

如何在txt文件中保存异常?

在 Blazor 中 Select 框绑定

Razor 主机工厂错误

以编程方式从后面的代码中关闭 aspx 页面

在 asp.net 中为动态 PDF 指定文件名

ASP.NET 中的全局资源与本地资源

如何通过 Google 图表 API 使用 X 轴中的日期?