如何从同一解决方案中的 .NET Framework Class 库项目访问属于 .NET Core Web API 项目的 appSettings.json?

How to access appSettings.json which belongs to a .NET Core Web API project from a .NET Framework Class Library project in the same solution?

我有一个单独的 class 库项目(.NET Framework 4.8)来访问数据库。这个 class 库是用 Visual Basic(VB) 编写的。

最近,由于一项新要求,我不得不在我的解决方案中添加一个 Web API 层以通过端点公开数据。

我在现有解决方案中创建了一个新的 .NET Core 2.1 Web API 项目。我根据规范在 .NET Core 中的 appSettings.json 中配置了应用程序设置,而不是在 .NET Framework 中的 App.config 中。

现在下面的代码失败了(我无法访问我的配置设置)。

Public connectionString As String = System.Configuration.ConfigurationManager.AppSettings("ConnectionString")

错误:system.typeinitializationexception

注意:此代码以前有效。无法访问配置设置。

替代尝试: 我尝试创建 .NET Framework Web API (v4.8) 而不是 .NET Core Web API,它起作用了。所以,请给我一个解决方案,从 .NET Core Web API 项目访问 appSettings.json 到 .NET Framework Class Library (v4.8),它是用 VB 编写的.

How to access appSettings.json which belongs to a .NET Core Web API project from a .NET Framework Class Library project in the same solution

据我们所知,ASP.NET核心使用different configuration settings。为达到您的上述要求,您可以尝试以下方法:

方法 1: 修改您的 Class 库方法以接受附加参数,然后您可以从 [=37= 读取 ConnectionString 等]Web.config 或 appsettings.json 并在相应应用程序中调用方法时将其作为参数传递。

方法 2: 修改和扩展您的 Class 库,使其适用于 ASP.NET 核心配置设置,如下所示。

Imports System.Configuration
Imports Microsoft.Extensions.Configuration

Public Class DbGeneric
    Private ReadOnly _configuration As IConfiguration
    Public Sub New(ByVal configuration As IConfiguration)
        _configuration = configuration
    End Sub

    Public Sub New()
    End Sub
    Public Function GetAll() As String
        Dim connectionString As String = ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString
        Return connectionString
    End Function

    Public Function GetAllForCore() As String
        Dim connectionString As String = _configuration("ConnectionStrings:DefaultConnection").ToString()
        Return connectionString
    End Function
End Class

在ASP.NET应用中

var dbGeneric = new MyClassLibraryVB.DbGeneric();
var con_str = dbGeneric.GetAll();

在 ASP.NET 核心应用中

public class ValuesController : ControllerBase
{
    private readonly IConfiguration Configuration;
    public ValuesController(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IActionResult GetAll()
    {
        var dbGeneric = new MyClassLibraryVB.DbGeneric(Configuration);
        var con_str = dbGeneric.GetAllForCore();

appsettings.json

中的 ConnectionString
"ConnectionStrings": {
  "DefaultConnection": "{conection_string_for_netcore}"
}

测试结果