Не удается добавить appsettings.json в проект WPF .net core 3.0
Я создаю проект WPF, используя .net Core 3.00
, и мне не удается добавить элемент appsettings.json
файл в мой проект, который будет использоваться для хранения моей строки подключения к БД.
Я бы обычно делал внутри app.config
, но теперь это было удалено из .net Core
.
Везде упоминается использование appsettings.json
в качестве замены, и что он должен быть вручную добавлен и инициализирован в OnStartUp()
функция с использованием экземпляра IConfiguration
, и там после использования Dependancy Injection для передачи класса конфигурации в проект.
Но моя проблема в том, что можно добавить только appsettings.json
пункт на asp.net Core
проекты?? не мое решение WPF.
Я делаю appolgies, если мне не хватает чего-то очень очевидного (что, вероятно, и есть), я просто не могу найти никаких решений.
Спасибо заранее
4 ответа
Нет необходимости переключаться на appsettings.json
файл в.NET Core. Вы все еще можете использовать тот же "старый" на основе XMLApp.config
файл в приложении WPF, ориентированном на.NET Core, если хотите.
Просто добавьте новый файл конфигурации (Проект-> Добавить новый элемент-> Файл конфигурации приложения) в свой проект и назовите его "App.config". Если вы затем добавите к нему следующее содержимое:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="connectionString" connectionString="..."/>
</connectionStrings>
</configuration>
... вы должны иметь возможность получить строку подключения во время выполнения, используя ConfigurationManager
API:
ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
Шаблон WPF по умолчанию должен по умолчанию включать пакет https://www.nuget.org/packages/System.Configuration.ConfigurationManager/.
Шаги:
Чтобы добавить следующие пакеты nuget
Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft.Extensions.Configuration.Json
Вам нужно будет создать и добавить appsettings.json вручную и установить
copy it to output directory
какcopy if newer
AppSetting.json
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
Program.cs (для консольного приложения.NetCore)
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
Console.WriteLine(configuration.GetConnectionString("BloggingDatabase"));
}
App.xaml.cs (для.NET CORE WPF)
public partial class App : Application
{
public IServiceProvider ServiceProvider { get; private set; }
public IConfiguration Configuration { get; private set; }
protected override void OnStartup(StartupEventArgs e)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
Configuration = builder.Build();
Console.WriteLine(configuration.GetConnectionString("BloggingDatabase"));
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
ServiceProvider = serviceCollection.BuildServiceProvider();
var mainWindow = ServiceProvider.GetRequiredService<MainWindow>();
mainWindow.Show();
}
private void ConfigureServices(IServiceCollection services)
{
// ...
services.AddTransient(typeof(MainWindow));
}
}
Ссылки:
Добавьте файл App.config в корень вашего проекта и добавьте этот код:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="AppConnectionString" connectionString="YourCS"/>
</connectionStrings>
<appSettings>
<add key="DefaultLanguage" value="1"/>
</appSettings>
</configuration>
appSettings с S, а не с
Теперь вы можете прочитать их в любом месте вашего приложения dotnet core wpf:
string DefaultLanguage = ConfigurationManager.AppSettings.Get("DefaultLanguage");
string ConnectionString = ConfigurationManager.ConnectionStrings["AppConnectionString"].ConnectionString;
Я нашел короткий путь.
Установить пакет Microsoft.Extensions.Configuration.Json
Создайте AppSetting.json в решении
{"ConnectionStrings": {"MyDataBase": "Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"},}
Создать метод GetConnectionString
общедоступная строка GetConnectionString (строка connectionStringName) {var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", необязательно: false,reloadOnChange: true);
var configurationRoot = builder.Build(); var connectionString = configurationRoot.GetConnectionString(connectionStringName); return connectionString; }
Вызов метода GetConnectionString в OnConfiguring
защищенное переопределение void OnConfiguring (DbContextOptionsBuilder optionsBuilder){base.OnConfiguring(optionsBuilder);
var connectionString = GetConnectionString("MyDataBase"); optionsBuilder.UseLazyLoadingProxies().UseSqlServer(connectionString); }