web-dev-qa-db-ja.com

.NET FX4.6の.NET Standard2.0ライブラリでSystem.Configuration.Configurationマネージャーを使用できません

NetStandard2.0で作成されたアセンブリがあります。 System.Configuration.ConfigurationManagerを使用してAppSettingsを読み取ります。 System.Configuration.ConfigurationManagerのnugetパッケージをバージョン4.4.Xでインストールしました。これはNetStandard2.0

コンソールアプリ(.Net Core)でこのアセンブリを参照すると、AppSettingsが適切に読み取られますが、古い.NetFramework(4.6.X)コンソールアプリでこのアセンブリを参照すると、動作せず、例外がスローされます。

以下のコードをご覧ください。

アセンブリ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"];
     }
  }

}

コンソールアプリ:NetFx 4.6.X

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

実行後の例外:

'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.'

.NetCoreを使用して開発されたコンソールアプリで動作します。

助けてください!!!

27
kiran

@kiranがコメントで言及したように、次を実行することでこれを解決できます:

Install-Package System.Configuration.ConfigurationManager

nuGetパッケージマネージャー

32
Rilcon42

System.Configuration.ConfigurationManagerパッケージを参照し、ConfigurationManagerクラスを使用する.NET標準ライブラリを作成することはできません。ライブラリが.NET Core固有のパッケージへの参照を追加すると、フレームワーク固有のパッケージにバインドされるため、移植性のある.NET Standardライブラリではなくなります。

.NET Standard 2.0にはSystem.Configuration.ConfigurationManager AP​​Iが含まれていません。したがって、このAPIを使用する唯一の方法は、System.Configuration.ConfigurationManagerで使用できる.NET Core .NET Coreパッケージに対してライブラリの1つのバージョンをビルドし、に対してビルドされるライブラリの2番目のバージョンを持つことです。 NET FX System.Configurationアセンブリ。.NET FXで使用できます。

6

同じ問題があり、同じSystem.Configuration.ConfigurationManagerパッケージをFX4.6プロジェクトにインストールした後、この問題は解決しました。

1
pcontra