Cannot add appsettings.json inside WPF project .net core 3.0
Steps:
To Add the following nuget packages
Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft.Extensions.Configuration.Json Microsoft.Extensions.DependencyInjection
You would need to create and add appsettings.json manually and set
copy it to output directory
ascopy if newer
AppSetting.json
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
Program.cs (For .NetCore Console App)
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 (For .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));
}
}
References:
- https://blog.bitscry.com/2017/05/30/appsettings-json-in-net-core-console-app/
- https://marcominerva.wordpress.com/2019/03/06/using-net-core-3-0-dependency-injection-and-service-provider-with-wpf/
- https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings
It's no requirement to switch to an appsettings.json
file in .NET Core. You may still use the very same "old" XML-based App.config
file in a WPF app that targets .NET Core if you want to.
Just add a new configuration file (Project->Add New Item->Application Configuration File) to your project and name it "App.config". If you then add the following contents to it:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="connectionString" connectionString="..."/>
</connectionStrings>
</configuration>
...you should be able to get the connection string at runtime using the ConfigurationManager
API:
ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
The default WPF template should include the System.Configuration.ConfigurationManager package by default.