Невозможно добавить настройки приложения. json внутри проекта WPF. net core 3.0 - PullRequest
5 голосов
/ 25 января 2020

Я создаю проект WPF с использованием .net Core 3.00, и у меня возникают проблемы при добавлении файла appsettings.json в мой проект, который будет использоваться для хранения строки подключения к БД.

Обычно я сделано внутри app.config, но теперь оно удалено из .net Core.

Везде упоминается использование appsettings.json в качестве замены, и что оно должно быть вручную добавлено и инициализировано в функции OnStartUp() с использованием экземпляра IConfiguration, а затем после использования Dependancy Injection для передачи в Конфигурационный класс в проект.

Но моя проблема в том, что можно добавить элемент appsettings.json только в проекты asp.net Core ?? не мое решение WPF.

Я делаю аппольды, если мне не хватает чего-то очень очевидного (что, вероятно, есть), я просто не могу найти какие-либо решения.

Большое спасибо заранее

Ответы [ 3 ]

5 голосов
/ 25 января 2020

Шаги:

  • Чтобы добавить следующие пакеты nuget

    Microsoft.Extensions.Configuration
    Microsoft.Extensions.Configuration.FileExtensions
    Microsoft.Extensions.Configuration.Json
    
  • Вам потребуется создать и добавьте appsettings. json вручную и установите copy it to output directory как copy if newer


AppSetting. json

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

Program.cs (для консольного приложения .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 (для. 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));
    }
}

Ссылки:

3 голосов
/ 27 января 2020

Нет необходимости переключаться на файл appsettings.json в. NET Core. Вы все еще можете использовать тот же «старый» XML -основанный App.config файл в приложении WPF, которое предназначено для. NET Core, если хотите.

Просто добавьте новый файл конфигурации (Project- > Добавьте новый элемент-> Файл конфигурации приложения) в свой проект и назовите его «App.config». Если затем добавить к нему следующее содержимое:

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

... вы сможете получить строку подключения во время выполнения, используя ConfigurationManager API:

ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;

Шаблон WPF по умолчанию должен включать в себя пакет System.Configuration.ConfigurationManager по умолчанию.

0 голосов
/ 29 апреля 2020

добавьте файл App.config в root вашего проекта и добавьте этот код:

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

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

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

</configuration>

appSettings с S не с

сейчас Вы можете прочитать их в любом месте вашего приложения do tnet core wpf:

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