【问题标题】:Determine application framework version in library C#在库 C# 中确定应用程序框架版本
【发布时间】:2021-12-30 09:22:22
【问题描述】:

我有一个 .NET 标准版本的库。此库将用于 .NET 应用程序和 .NET Core 应用程序。我想为库中的 .NET Core 应用程序使用 IConfiguration,但 .NET 应用程序会引发异常。

我需要检查版本或确定应用程序是 .NET Core 还是 .NET framework?我尝试获取 appsettings.json 文件来确定应用程序类型,但 .NET 和 .NET Core 应用程序的根路径不同。

当我尝试获取应用程序的框架版本时,它给了我库的版本。

如何区分它是哪种类型的应用程序?我怎样才能做到这一点?

【问题讨论】:

  • .NET 5 和 6 是 .NET Core 5 和 6。您可能指的是 .NET Framework 吗?您还可以通过安装 NuGet 包在 .NET Framework 应用程序中使用 .NET 的配置、日志记录和依赖注入
  • 无论如何,运行时版本根本帮不了你。如果未设置配置,您的库将从哪里加载其配置设置? appsettings.json 不是某种特殊文件。它只是一个由配置中间件加载的 JSON 文件。您可以在多个位置以不同的格式指定许多其他文件。甚至从数据库加载设置。您也可以轻松删除该文件。如果没有配置中间件,appsettings.json 文件根本不会被加载
  • 您能否发布一些在 .NETFramework 中使用但在 .NET Core 中可以正常使用的示例代码?我认为您遇到了XY problem
  • 图书馆没有这种方式的业务访问配置,这是应用程序的工作。让它为你提供你需要的配置,作为强类型数据;应用程序如何获得它是应用程序的问题。虽然您可以使用IConfiguration 来获取传入的数据,但这是一个非常具体且非常薄弱的​​抽象,无法明确您的类需要什么样的配置。

标签: c# .net asp.net-core .net-standard appsettings


【解决方案1】:

有几种方法可以解决您的问题:

  • 尝试为需要字符串、整数或自定义类的方法使用更常见的参数。是否真的需要添加特定于框架的类或函数,还是有更好的选择?
  • 您可以为您的库使用multi-target configuration,然后在您必须为不同框架使用不同逻辑的任何地方都需要#if NET45 和#elif NETSTANDARD2_0 代码。这可能会导致代码的可读性不太好。
  • 使用两个库,一个用于 .NET Core 应用程序(例如基于 .NET Standard 2.1),另一个用于 .NET Framework(例如 .NET FW 4.8)。 .NET Standard 库中的 .cs 文件也可以在 .NET 4.8 库中使用(如果使用了兼容的功能)。可以选择 .cs 文件,例如在VS中通过“上下文菜单>添加现有元素”。确认所选文件时,展开“添加”下的下拉选项并选择“添加为链接”。这样文件只需要维护一次(更改适用于两个库)。然后可以将特定于框架的文件单独添加到相应的库中,而不是作为链接。 Here's 一篇关于它的好文章。

这些只是一些例子,当然可能还有其他或更好的解决方案。

我个人会尝试为我的方法使用独立的参数,如果这不可能,我更喜欢每个框架版本的自定义库解决方案。

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多