簡體   English   中英

無法在 WPF 項目 .net core 3.0 中添加 appsettings.json

[英]Cannot add appsettings.json inside WPF project .net core 3.0

我正在使用.net Core 3.00創建一個 WPF 項目,但我無法將項目appsettings.json文件添加到我的項目中,該項目用於存儲我的數據庫連接字符串。

我通常會在app.config完成,但現在已從.net Core刪除。

到處都提到使用appsettings.json作為替代,並且必須使用IConfiguration實例在OnStartUp()函數中手動添加和初始化它,然后使用依賴注入將配置類傳遞到項目中。

但我的問題是只能在asp.net Core項目上添加appsettings.json項目? 不是我的 WPF 解決方案。

如果我遺漏了一些非常明顯的東西(我可能是),我會做 appolgies,我似乎無法找到任何解決方案。

提前謝謝了

腳步:

  • 添加以下nuget包

     Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft.Extensions.Configuration.Json Microsoft.Extensions.DependencyInjection
  • 您需要手動創建和添加 appsettings.json copy it to output directory作為copy if newer


應用設置.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));
    }
}

參考:

不需要切換到 .NET Core 中的appsettings.json文件。 如果需要,您仍然可以在面向 .NET Core 的 WPF 應用程序中使用完全相同的“舊”基於 XML 的App.config文件。

只需在您的項目中添加一個新的配置文件(Project->Add New Item->Application Configuration File)並將其命名為“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包。

將 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而不是 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

     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; }
  4. 在 OnConfiguring 中調用方法 GetConnectionString

     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); var connectionString = GetConnectionString("MyDataBase"); optionsBuilder.UseLazyLoadingProxies().UseSqlServer(connectionString); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM