【问题标题】:.NET Core Library not reading config file [duplicate].NET Core 库未读取配置文件 [重复]
【发布时间】:2021-05-02 00:18:46
【问题描述】:

我有 Windows 10 电脑。我正在使用 Visual Studio 2019。

我创建了一个解决方案 MySolution

在解决方案中,我首先创建了一个名为 MyLibrary.NET Core 库项目。通过 Nuget 包管理器,我添加了System.Configuration.ConfigurationManager(5.0.0 版本)和System.Data.SqlClient(4.8.2 版本)包。

我向其中添加了一个名为 App.ConfigApplication Configuration File

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MyConnectionString" connectionString="Server=myserver;Initial Catalog=mydatabase;Trusted_Connection=True; Pooling=true; Min Pool Size=10;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

在这个项目中,我创建了一个名为 DatabaseInformation 的静态类。在该类中,我创建了一个静态构造函数,它正在读取配置文件:

static DatabaseInformation()
{
   ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["MyConnectionString"];
}

在解决方案中,然后我创建了一个名为 MyConsoleApp.NET Core 控制台应用程序项目来测试 MyLibrary 项目。我添加了 MyLibrary 项目对它的引用。然后编写代码触发DatabaseInformation类的静态构造函数。在调试模式下运行,发现它没有读取配置文件,并且 settings 变量为空。

可能是什么原因,我该如何解决?我可以在 \bin\Debug\netcoreapp3.1 文件夹中看到配置文件为 MyLibrary.dll.config,因此它应该已被读取。

【问题讨论】:

  • @KenTsu 确实如此。谢谢指出

标签: c# .net-core app-config configurationmanager


【解决方案1】:

我认为您需要将 App.Config 文件添加到主解决方案中,而不是在类库项目中,就像 @KenTsu 将评论发布到另一个说同样事情的堆栈问题。

【讨论】:

    【解决方案2】:

    在 ASP.NET Core 中,配置系统非常灵活,连接字符串可以存储在 appsettings.json、环境变量、用户机密存储或其他配置源中。有关详细信息,请参阅 ASP.NET Core 文档的配置部分。

    例如,您可以使用 Secret Manager 工具来存储您的数据库密码,然后在脚手架中, 使用简单地由Name=&lt;database-alias&gt;.组成的连接字符串

    dotnet user-secrets set ConnectionStrings.YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
    dotnet ef dbcontext scaffold Name=ConnectionStrings.YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer
    

    或者下面的例子显示了appsettings.json.中存储的连接字符串

    {
      "ConnectionStrings": {
        "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
      },
    }
    

    然后上下文通常在Startup.cs 中配置,连接字符串从配置中读取。注意GetConnectionString() 方法查找键为ConnectionStrings:&lt;connection string name&gt;. 的配置值,您需要导入 Microsoft.Extensions.Configuration 命名空间才能使用此扩展方法。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<BloggingContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2013-06-07
      • 2019-02-02
      • 2011-07-18
      相关资源
      最近更新 更多