Не удается добавить appsettings.json в проект WPF .net core 3.0

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

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

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

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

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

Спасибо заранее

4 ответа

Решение

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

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

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

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

ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;

Шаблон WPF по умолчанию должен по умолчанию включать пакет https://www.nuget.org/packages/System.Configuration.ConfigurationManager/.

Шаги:

  • Чтобы добавить следующие пакеты 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));
    }
}

Ссылки:

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

<?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, а не с

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

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

Я нашел короткий путь.

  1. Установить пакет Microsoft.Extensions.Configuration.Json

  2. Создайте AppSetting.json в решении

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

  3. Создать метод GetConnectionString

    общедоступная строка GetConnectionString (строка connectionStringName) {var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", необязательно: false,reloadOnChange: true);

                 var configurationRoot = builder.Build();
    
         var connectionString = configurationRoot.GetConnectionString(connectionStringName);
         return connectionString;
     }
    
  4. Вызов метода GetConnectionString в OnConfiguring

    защищенное переопределение void OnConfiguring (DbContextOptionsBuilder optionsBuilder){base.OnConfiguring(optionsBuilder);

                 var connectionString = GetConnectionString("MyDataBase");
    
         optionsBuilder.UseLazyLoadingProxies().UseSqlServer(connectionString);
     }
    
Другие вопросы по тегам