Estoy creando un proyecto WPF usando .net Core 3.0, y tengo problemas para agregar el archivo appsettings.json
del elemento a mi proyecto, que se usará para almacenar mi cadena de conexión de base de datos.
Normalmente lo habría hecho dentro de app.config
, pero ahora se eliminó de .net Core.
En todas partes se menciona el uso de appsettings.json
como reemplazo, y que debe agregarse e inicializarse manualmente en la función OnStartUp()
usando una instancia de IConfiguration
, y luego usar Inyección de dependencia para pasar la clase de configuración al proyecto.
Pero mi problema es que solo puedo agregar el elemento appsettings.json
en los proyectos de asp.net Core. no es mi solución WPF.
Me disculpo si me estoy perdiendo algo muy obvio (que probablemente sea así), parece que no puedo encontrar ninguna solución.
Pasos:
Para agregar los siguientes paquetes nuget
Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft.Extensions.Configuration.Json Microsoft.Extensions.DependencyInjection
Debería crear y agregar appsettings.json manualmente y configurar copy it to output directory
como copy if newer
AppSetting.json
{ "ConnectionStrings": { "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;" }, }
Program.cs (para la aplicación de consola .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 (para .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)); } }
Referencias:
No es un requisito cambiar a un archivo appsettings.json
en .NET Core. Todavía puede usar el mismo archivo App.config
"antiguo" basado en XML en una aplicación WPF que apunta a .NET Core si lo desea.
Simplemente agregue un nuevo archivo de configuración (Proyecto-> Agregar nuevo elemento-> Archivo de configuración de la aplicación) a su proyecto y asígnele el nombre "App.config". Si luego le agregas los siguientes contenidos:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="connectionString" connectionString="..."/> </connectionStrings> </configuration>
... debería poder obtener la cadena de conexión en tiempo de ejecución utilizando la API de ConfigurationManager
:
ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
La plantilla de WPF predeterminada debe incluir el paquete System.Configuration.ConfigurationManager de forma predeterminada.
agregue un archivo App.config a la raíz de su proyecto y agregue este código:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="AppConnectionString" connectionString="YourCS"/> </connectionStrings> <appSettings> <add key="DefaultLanguage" value="1"/> </appSettings> </configuration>
appSettings es con S no s
Ahora puede leerlos en cualquier lugar de su aplicación dotnet core wpf:
string DefaultLanguage = ConfigurationManager.AppSettings.Get("DefaultLanguage"); string ConnectionString = ConfigurationManager.ConnectionStrings["AppConnectionString"].ConnectionString;