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を使用して開発されたコンソールアプリで動作します。
助けてください!!!
@kiranがコメントで言及したように、次を実行することでこれを解決できます:
Install-Package System.Configuration.ConfigurationManager
nuGetパッケージマネージャー
System.Configuration.ConfigurationManager
パッケージを参照し、ConfigurationManager
クラスを使用する.NET標準ライブラリを作成することはできません。ライブラリが.NET Core固有のパッケージへの参照を追加すると、フレームワーク固有のパッケージにバインドされるため、移植性のある.NET Standardライブラリではなくなります。
.NET Standard 2.0
にはSystem.Configuration.ConfigurationManager
APIが含まれていません。したがって、このAPIを使用する唯一の方法は、System.Configuration.ConfigurationManager
で使用できる.NET Core .NET Core
パッケージに対してライブラリの1つのバージョンをビルドし、に対してビルドされるライブラリの2番目のバージョンを持つことです。 NET FX System.Configuration
アセンブリ。.NET FX
で使用できます。
同じ問題があり、同じSystem.Configuration.ConfigurationManagerパッケージをFX4.6プロジェクトにインストールした後、この問題は解決しました。