No se puede agregar appsettings.json dentro del proyecto WPF .net core 3.0

 C Programming >> Programación C >  >> Tags >> WPF
No se puede agregar appsettings.json dentro del proyecto WPF .net core 3.0

Pasos:

  • Para agregar los siguientes paquetes nuget

      Microsoft.Extensions.Configuration
      Microsoft.Extensions.Configuration.FileExtensions
      Microsoft.Extensions.Configuration.Json
      Microsoft.Extensions.DependencyInjection
    
  • Deberá crear y agregar appsettings.json manualmente y configurar copy it to output directory como copy if newer

Configuración de aplicación.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:

  • 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

No es un requisito cambiar a un appsettings.json archivo en .NET Core. Todavía puede usar el mismo App.config "antiguo" basado en XML archivo en una aplicación WPF que tiene como destino .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 agrega 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 usando ConfigurationManager API:

ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;

La plantilla 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 parte de su aplicación dotnet core wpf:

string DefaultLanguage = ConfigurationManager.AppSettings.Get("DefaultLanguage"); 
string ConnectionString = ConfigurationManager.ConnectionStrings["AppConnectionString"].ConnectionString;