текущий проект (3-х уровневая архитектура) уровень хранилища, основанный на проекте библиотеки классов, основанный на инфраструктуре объектов, контекстный класс и все сущности в нем - все время используемые проектом mvc и все нормально (все .net framework),
пришло и добавило консольное приложение ядра dotnet, чтобы использовать его в качестве автоматизированного задания, успешно ссылающегося на проект библиотеки классов репозитория - после установки целевого консольного приложения dotnet на .netframework -
все до сих пор идет хорошо, пока этот кусок кода
установить конфигурацию в проекте библиотеки классов app.config, не загрузился,
консольное приложение dotnetcore уже имеет свои собственные конфиги в файлах json, и все в порядке
класс DBcontext
public class DBContext : IdentityDbContext<User> //ApplicationUser
{
public DBContext()
: base("DatabaseConnectionString", throwIfV1Schema: false)
{
// here just checking and found out all configs are missing
var cnns = ConfigurationManager.ConnectionStrings[0];
Configuration.LazyLoadingEnabled = false;
Database.CommandTimeout = 900;
}
класс записей приложения консоли ядра dotnet
class Program
{
private static IConfigurationRoot ConfigurationRoot { get; set; }
private static IServiceProvider ServiceProvider { get; set; }
private static readonly string env;
static Program()
{
env = Environment.GetEnvironmentVariable("env");
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env}.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
ConfigurationRoot = builder.Build();
}
static void Main(string[] args)
{
var mySettingsConfig = new GeneralConfiguration();
ConfigurationRoot.GetSection("GeneralConfiguration").Bind(mySettingsConfig);
//it's here
string DatabaseConnectionString = ConfigurationRoot.GetConnectionString("DatabaseConnectionString");
Console.WriteLine($"Welcome to {mySettingsConfig.AppName} , {Environment.NewLine}Please note that You are running an {env} configured Application");
var serviceCollection = new ServiceCollection()
.RegisterServices();
serviceCollection.AddOptions();
serviceCollection.Configure<GeneralConfiguration>(ConfigurationRoot.GetSection(nameof(GeneralConfiguration)));
ServiceProvider = serviceCollection.BuildServiceProvider();
var syncService = ServiceProvider.GetService<ISyncService>();
syncService.SyncTheStuff();
}
}
есть две работы и одно возможное решение
1 - просто рефакторинг контекстного класса кажется оптимальным решением, но он будет включать в себя тонну рефакторинга,
2 - или добавить оператор if в конструкторе, чтобы библиотека классов, используемая консольным приложением dotnet, загружала недостающие конфиги из другого места (xml, файл json),
3-лучшее решение получить проект библиотеки классов для загрузки конфигов из консольного приложения ядра dotnet