web-dev-qa-db-fra.com

Impossible d'utiliser le gestionnaire System.Configuration.Configuration dans une bibliothèque .NET Standard2.0 sur .NET FX4.6

J'ai un assemblage créé dans NetStandard2.0. Il lit AppSettings à l’aide de System.Configuration.ConfigurationManager . J'ai installé le paquet nuget de System.Configuration.ConfigurationManager avec la version 4.4.X qui convient à NetStandard2.0.

Lorsque je référence cette assemblée dans une application console (.Net Core), il lit correctement AppSettings, mais lorsque je fais référence à cette assemblée dans l'ancienne application de console .NetFramework (4.6.X), il ne fonctionne pas et génère une exception.

Veuillez consulter le code ci-dessous.

Assemblée 1: NetStandard 2.0

Nuget: System.Configuration.ConfigurationManager 4.4.0

using System.Configuration;

namespace Bootstrapper.Lib
{
   public class Bootstrapper
   {
     public Bootstrapper()
     {

     }

     public void LoadAppSettings()
     {
         string serachPattern= 
         ConfigurationManager.AppSettings["AssemblySearchPattern"];
     }
  }

}

Application console: NetFx 4.6.X

using System;
using Bootstrapper.Lib;
namespace Bootstrapper.Console
{
  class Program
  {
    static void Main(string[] args)
    {
        new Bootstrapper().LoadAppSettings();
    }
  }
}

Exception après exécution:

'Could not load file or Assembly 'System.Configuration.ConfigurationManager, 
 Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one 
 of its dependencies. The system cannot find the file specified.'

Cela fonctionnera avec la Console App développée à l'aide de .NetCore.

S'il vous plaît aider !!!

14
kiran

Comme @kiran l'a mentionné dans un commentaire, vous pouvez résoudre ce problème en exécutant:

Install-Package System.Configuration.ConfigurationManager

dans NuGet Package Manager

12
Rilcon42

Il n'est pas possible de créer une bibliothèque .NET Standard qui référence le package System.Configuration.ConfigurationManager et utilise la classe ConfigurationManager. Une fois que la bibliothèque ajoute une référence au package spécifique à .NET Core, elle cesse d'être une bibliothèque .NET Standard portable car elle est liée au package spécifique à la structure. 

.NET Standard 2.0 ne contient pas System.Configuration.ConfigurationManager API. Par conséquent, le seul moyen d’utiliser cette API est de créer une version de la bibliothèque contre le package .NET Core System.Configuration.ConfigurationManager pouvant être utilisé avec .NET Core et d’avoir une deuxième version de la bibliothèque construite avec .NET FX System.Configuration Assembly et pouvant être utilisée. sur .NET FX

4
Jacek Blaszczynski

Avait le même problème et après avoir installé le même package System.Configuration.ConfigurationManager dans le projet FX4.6 résolu ce problème.

0
Pedro