如何在.Net Core应用程序中阅读web.config文件

时间:2017-10-29 03:07:30

标签: asp.net-core configuration connection-string

我创建了一个.Net Core API,我引用了一个.Net框架应用程序。引用的应用程序连接到数据库,其连接字符串存储在web.config文件中:

    string CONNSTR =ConfigurationManager.ConnectionStrings["SHOPPINGCNN"].ConnectionString;

.Net Core应用程序使用appsettings.json而不是web.config文件。当我运行API并尝试使用引用的应用程序资源时,上面的代码将被触发并返回null,因为.net Core应用程序中不存在web.config文件。解决此问题的最佳解决方案是什么

6 个答案:

答案 0 :(得分:9)

<。>在.net核心中,您可以使用ConfigurationBuilder来读取appsettings.json文件。

您可以执行以下操作。

appsettings.json示例

{
  "option1": "value1_from_json",
  "option2": 2,

  "ConnectionStrings": {
    "YourConnectionString": "............."
  }
}

C#代码示例

static class YourClass
{
    public static IConfigurationRoot Configuration;

    public static string GetConnectionString()
    {
         var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json");

         Configuration = builder.Build();
         var connectionString = Configuration["ConnectionStrings:YourConnectionString"];

    }

}

答案 1 :(得分:6)

对于.NET Core应用程序,最好的方法是使用Configuration API。这是一种非常灵活的方式,并且由于提供者模式,它允许使用不同的源,而不仅是最常见的appsettings.json文件(通过JSON文件的方式,并且可以以随机方式命名) :

  
      
  • 文件格式(INI,JSON和XML)
  •   
  • 命令行参数
  •   
  • 环境变量
  •   
  • 内存中的.NET对象
  •   
  • 加密的用户存储Azure Key Vault
  •   
  • 您安装或创建的自定义提供程序
  •   

现在关于ConfigurationManager。起初,.NET Core被迫忘记了这个类 - 它没有被实现和支持,而且想法是通过提供新的Configuration API来完全取代它。

此外,实际情况是ASP.NET Core应用程序不再通过IIS托管(IIS现在主要用作反向代理),因此web.config不再那么有用了(除非很少见)您仍需要定义特定于IIS配置的参数的情况。)

但是,在提供.NET Standard 2.0之后,这个System.Configuration.ConfigurationManager nuget包可用并带回ConfigurationManager类。由于在新的.NET Core 2.0中实现了新的compatibility shim,因此成为可能。

关于你的情况,很难说你为什么没有&#39; null&#39;因为它没有足够的信息:

  • 它可能是web.config
  • 中的错误部分
  • web.config可能无法复制到您的输出/发布文件夹

答案 2 :(得分:4)

如果你错过了 - 并且因为@Zuhair似乎不想发布答案 - 这里是他们的解决方案的复制粘贴(我最初错过了它,因为它只是在评论中):< / p>

  

我找到了解决方案。我将Web.config的名称更改为   app.config和我能够使用:

获取连接字符串      

System.Configuration.ConfigurationManager.ConnectionStrings [&#34; SHOPPINGCNN&#34]。ConnectionString的

     

app.config文件如下所示:

<?xml version="1.0"> encoding="utf-8" ?> 
<configuration> 
<connectionStrings> 
<add name="SHOPPINGCNN" connectionString="server=.\SQLEXPRESS;integrated security=true;database=xxxxx" /> 
</connectionStrings> 
</configuration>

您还需要安装此NuGet包:

System.Configuration.ConfigurationManager

在我的情况下,我只是重命名了包含connectionString&#39; app.config&#39;的web.config。它起作用了。

我意识到这可能不是一个很好的长期解决方案,但是对于混合的遗留项目 - 或者开始学习.net核心它非常有用。

答案 3 :(得分:4)

由于.Net Core应用程序是自托管的,几乎可以在任何平台上运行,因此它们不再托管在ISS上。 .Net Core应用程序设置默认以Json格式(appsettings.json)存储,而.Net Framework应用程序配置以web.config格式存储在XML文件中。有关.Net Core应用程序的更多信息,请阅读Configuration in ASP.NET Core。在我的例子中,我试图从.Net Core 2.0程序集访问.Net Framework程序集的数据层。要实现这一点,不需要在.Net Core应用程序中安装System.Configuration.ConfigurationManager包,但是你只需要将app.config添加到.Net Core程序集,然后将连接字符串添加到它:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="SHOPPINGCNN" connectionString="server=your server name;integrated security=true;database=your database name" />
  </connectionStrings>
</configuration>

一切都会好起来的。确保使用在.Net Framework应用程序中使用的相同连接字符串名称(在我的情况下为SHOPPINGCNN),否则您将无法获得所需的结果。我在我的项目中做到了这一点并且100%

答案 4 :(得分:0)

对于每个在asp.net 核心中阅读web.config有问题的人。经过数小时的尝试和失败..然后我来到了一个博客,上面写着

.Net Core应用程序使用appsettings.json而不是web.config 文件。

所以我建议每个人都将想要读取的文件放置到appsettings.json中,然后从那里可以读取。有很多可用的方法。只是想节省尝试时间。

答案 5 :(得分:0)

这里的问题是OP具有面向整个.Net Framework的数据访问层项目库,该库包含依赖于 ConfigurationManager 的代码。 ConfigurationManager 对.Net Core中的配置一无所知,因此无法访问默认配置实现(即 appsettings.json )中的值。一些答案指出,您可以向.Net Core客户端添加 app.config 文件,但是如果我们不紧抓鼻子,这会闻起来。

更好的解决方案是将连接字符串注入数据访问库。尤其是如果该库将被多个客户端使用。