【问题标题】:Can someone confirm .NET Core can't run a legacy .NET class library that uses System.Configuration.ConfigurationManager有人可以确认.NET Core 无法运行使用 System.Configuration.ConfigurationManager 的旧 .NET 类库
【发布时间】:2020-03-28 15:47:29
【问题描述】:

我有一些使用 ConfigurationManager 访问 AppSettings 的旧 (.NET 4.6) 代码。我正在尝试在 Azure Function v3 中使用此类库,但失败并出现错误:

Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.

在我花时间删除对 System.Configuration 的依赖之前,最好确认(记录)此特定场景不受支持 - 我在任何地方都找不到它。

我是否遗漏了一些简单的互操作性或不受支持?

【问题讨论】:

  • @mxmissile 该链接是关于在将旧版 .NET 应用程序升级到 .NET Core 时使用 ConfigurationManager。我的问题是关于使用使用它的第三方库。此外,在我发布这个问题之前,我确实尝试了建议的解决方案以及我能找到的任何其他解决方案。没有任何效果。
  • 所以你只是忘了部署它?如果您放弃旧的不良做法,好事仍然可能发生,System.Configuration 在该列表中名列前茅。
  • 不,您的评论与我在其他线程上看到的一致。这与部署问题无关。 Azure 函数正在 VS 中编译,但在运行时,当代码尝试执行旧类库时,它会失败并出现上述错误。
  • 不,这又是关于运行一个使用 .NET4.6 并在 Azure Function v3 (.Net CORE 3.1) 中使用 System.Configuration API 的类库

标签: .net-core azure-functions


【解决方案1】:

基于 .Net 核心的 Azure Function 版本 2 及更高版本,如果它们不兼容,则无法使用现有的 .net Framework (4.6) 库。

当您将使用现有的 .Net 框架类库时,您必须将所有配置放在 .Json 文件中。函数中没有 AppSetting 的概念。如果您只有 ConfigurationManager 类问题,您可以进行以下更改

.Net Framework 4.6

public string DatabaseId
    {
        get
        {
            return ConfigurationManager.AppSettings["DatabaseId"];
        }
    }

**.Net Core 3.1 **

public string DatabaseId
    {
        get
        {
            return Environment.GetEnvironmentVariable("DatabaseId");
        }
    }

如果您不想修改现有代码,可以将 Azure Function v1 与 ConfigurationManager 结合使用。

更新答案

ConfigurationManager 回来了,你可以看到这个link 但是我没有找到任何文档,如何使用新的配置管理器。新的ConfigurationManager 与.netstandard 2.0 兼容。

我看起来 Source code 我假设它会从 XML/JSON 文件中读取应用程序设置,但不确定我们如何在 .netstandard 中使用它。

我在我的示例应用程序(控制台、Web 和函数)中安装了 System.Configuration.ConfigurationManagerNuget,但没有从 JSON 文件中获取任何值。

【讨论】:

  • 谢谢,这也是我得出的结论。是否有任何文件明确指出这一点?我在哪里可以找到“兼容”API 的列表?哪里说 .NET Core 不支持 System.Configuration?
  • 用额外的细节更新了我的答案
  • 对不起,我没有完全理解。你的类库是 .NET4.6 吗?它运行正确吗?
  • .net core 3.1 以上截图中的所有项目,我从 nuget 安装 System.Configuration.ConfigurationManager
  • 对,所以这并不能真正解决问题,因为它专门针对 .NET Framework 和 .NET Core 之间的互操作
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2019-07-17
  • 2018-05-28
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
相关资源
最近更新 更多