无法在 WPF 项目 .net core 3.0 中添加 appsettings.json

dav*_*e.2 30 .net c# wpf .net-core-3.0

我正在使用 来创建一个 WPF 项目.net Core 3.00,但我无法将项目appsettings.json文件添加 到我的项目中,该项目用于存储我的数据库连接字符串。

我通常都在里面做app.config,但是现在已经被从中移除.net Core

到处都提到使用appsettings.json作为替代,并且必须OnStartUp()使用 的实例在函数中手动添加和初始化IConfiguration,然后使用依赖注入将配置类传递到项目中。

但我的问题是只能在appsettings.json项目上 添加asp.net Core项目??不是我的 WPF 解决方案。

如果我遗漏了一些非常明显的东西(我可能是),我会做 appolgies,我似乎无法找到任何解决方案。

提前谢谢了

Cli*_*int 45

脚步:

  • 添加以下nuget包

      Microsoft.Extensions.Configuration
      Microsoft.Extensions.Configuration.FileExtensions
      Microsoft.Extensions.Configuration.Json
      Microsoft.Extensions.DependencyInjection
    
    Run Code Online (Sandbox Code Playgroud)
  • 您需要手动创建和添加 appsettings.json 并设置copy it to output directorycopy if newer


应用设置.json

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

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"));
}
Run Code Online (Sandbox Code Playgroud)

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

参考:

  • 另外,请从“App.xaml”中删除“StartupUri”,因为我们要重写 mainWindow 并手动显示它。还要避免运行应用程序两次,因为在 DI 配置的情况下,运行一次会引发错误。 (6认同)
  • 感谢您的回答,但我的问题是关于 WPF 而不是 ASP.Net,除非我错过了一些东西。当我在 WPF 解决方案上单击“添加”时,我认为我可以添加文件“Appsettings.json”?类似于添加新类库的方式。但搜索时却没有出现 (2认同)
  • 为了更清晰地更新了 WPF 和 Console .Net Core 的答案 (2认同)
  • 抱歉,我以为我已将其标记为答案。我已经知道了。 (2认同)

mm8*_*mm8 13

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

只需在您的项目中添加一个新的配置文件(Project->Add New Item->Application Configuration File)并将其命名为“App.config”。如果您然后向其中添加以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <connectionStrings>
    <add name="connectionString" connectionString="..."/>
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

...您应该能够在运行时使用ConfigurationManagerAPI获取连接字符串:

ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
Run Code Online (Sandbox Code Playgroud)

默认 WPF 模板应默认包含System.Configuration.ConfigurationManager包。