我理解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相关问答推荐

Razor中的共享本地化资源文件

.NET 框架 3.5 和 TLS 1.2

如何在 ASP.​NET Core 中使用 jquery

如何向 Array.IndexOf 添加不区分大小写的选项

如何使用 executeReader() 方法仅检索一个单元格的值

有条件地在 Gridview 中隐藏 CommandField 或 ButtonField

为什么默认情况下不允许 GET 请求返回 JSON?

Directory.Exists 不适用于网络路径

返回值使用 String result=Command.ExecuteScalar() 结果返回 null 时发生错误

ASP.Net Core MVC - 自定义属性的客户端验证

返回 IHttpActionResult vs IEnumerable vs IQueryable

如何将 ASP.NET MVC5 身份验证添加到现有数据库

最佳服务器端 .NET PDF 编辑库

无法复制文件.访问路径被拒绝

如何设置 CSS 切换器

带有文件名的 ASP.net MVC4 WebApi 路由

使用 Asp.Net MVC 和 Web Api 配置 Ninject

ASP.NET web.config:system.web.compilation 中的 debug 属性的默认值是什么?

调查 Web.Config 重复部分原因的步骤

可以在不 destruct 站点的情况下将 MIME 类型添加到 web.config 吗?