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); }