Impossibile aggiungere appsettings.json all'interno del progetto WPF .net core 3.0

 C Programming >> Programmazione C >  >> Tags >> WPF
Impossibile aggiungere appsettings.json all'interno del progetto WPF .net core 3.0

Passaggi:

  • Per aggiungere i seguenti pacchetti nuget

      Microsoft.Extensions.Configuration
      Microsoft.Extensions.Configuration.FileExtensions
      Microsoft.Extensions.Configuration.Json
      Microsoft.Extensions.DependencyInjection
    
  • Dovresti creare e aggiungere appsettings.json manualmente e impostare copy it to output directory come copy if newer

AppSetting.json

   {
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}

Program.cs (per l'app .NetCore Console)

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 (per .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));
    }
}

Riferimenti:

  • 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

Non è necessario passare a un appsettings.json file in .NET Core. Puoi ancora usare lo stesso "vecchio" App.config basato su XML file in un'app WPF destinata a .NET Core, se lo desideri.

Basta aggiungere un nuovo file di configurazione (Progetto->Aggiungi nuovo elemento->File di configurazione dell'applicazione) al tuo progetto e chiamarlo "App.config". Se poi aggiungi i seguenti contenuti:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <connectionStrings>
    <add name="connectionString" connectionString="..."/>
  </connectionStrings>
</configuration>

...dovresti essere in grado di ottenere la stringa di connessione in fase di esecuzione utilizzando ConfigurationManager API:

ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;

Il modello WPF predefinito dovrebbe includere il pacchetto System.Configuration.ConfigurationManager per impostazione predefinita.


aggiungi un file App.config alla radice del tuo progetto e aggiungi questo codice:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <connectionStrings>
    <add name="AppConnectionString" connectionString="YourCS"/>
  </connectionStrings>

  <appSettings>
    <add key="DefaultLanguage" value="1"/>
  </appSettings>

</configuration>

appSettings è con S non s

Ora puoi leggerli ovunque dalla tua app wpf dotnet core:

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