Estoy creando un proyecto WPF usando .net Core 3.00
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.
Pido disculpas si me estoy perdiendo algo muy obvio (que probablemente sea así), simplemente parece que no puedo encontrar ninguna solución.
Muchas gracias de antemano
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;
Encontré un camino corto.
Instalar el paquete Microsoft.Extensions.Configuration.Json
Crear AppSetting.json en solución
{ "ConnectionStrings": { "MyDataBase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;" } }
Crear método GetConnectionString
public string GetConnectionString(string connectionStringName) { var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); var configurationRoot = builder.Build(); var connectionString = configurationRoot.GetConnectionString(connectionStringName); return connectionString; }
Método de llamada GetConnectionString en OnConfiguring
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); var connectionString = GetConnectionString("MyDataBase"); optionsBuilder.UseLazyLoadingProxies().UseSqlServer(connectionString); }