【问题标题】: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?如何从同一解决方案中的 .NET Framework 类库项目访问属于 .NET Core Web API 项目的 appSettings.json?
【发布时间】:2020-09-14 09:41:16
【问题描述】:

我有一个单独的类库项目 (.NET Framework 4.8) 来访问数据库。这个类库是用 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,并且成功了。所以,请为我提供一个解决方案,将 appSettings.json 从 .NET Core Web API 项目访问到用 VB 编写的 .NET Framework 类库(v4.8)。

【问题讨论】:

  • 您必须像读取任何其他文本文件一样读取该文件,然后将 JSON 文件解析为一个对象。这是一个标准问题,您可以在 Google 上轻松找到示例,我们真的不需要在这里重复我不认为,除非您已经尝试过某些事情并且遇到特定错误或问题(在这种情况下,请告诉我们关于它)?附:它不能通过配置管理器完成,因为它不是 .net 框架中标准配置的一部分。
  • 或者,为什么不将相同的设置复制到您的 web.config 中?你有两个独立的应用程序,它们应该有自己的配置,而不会在两者之间不必要地创建依赖关系
  • 或者,为什么不直接使用您已经创建的有效的 .NET Web API?为什么需要使用 .NET Core 重写它?

标签: vb.net asp.net-core-webapi app-config class-library appsettings


【解决方案1】:

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

众所周知,ASP.NET Core 使用different configuration settings。为了达到您的上述要求,您可以尝试以下方法:

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

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

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 Core 应用中

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 中的连接字符串

"ConnectionStrings": {
  "DefaultConnection": "{conection_string_for_netcore}"
}

测试结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多