首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在WPF项目中添加appsettings.json .net核心3.0

无法在WPF项目中添加appsettings.json .net核心3.0
EN

Stack Overflow用户
提问于 2020-01-25 12:27:34
回答 3查看 20K关注 0票数 37

我正在使用.net Core3.0创建一个WPF项目,我在将项目中添加项目appsettings.json文件时遇到了困难,该项目将用于存储我的DB连接字符串。

我通常会在app.config中这样做,但是现在这已经从.net核心中删除了。

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

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

我很抱歉,如果我错过了一些非常明显的东西(我可能就是这样),我只是找不到任何解决办法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-25 12:57:37

步骤:

  • 添加以下nuget包 Microsoft.Extensions.Configuration.FileExtensions Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json Microsoft.Extensions.DependencyInjection
  • 您需要手动创建和添加appsettings.json,并将copy it to output directory设置为copy if newer

AppSetting.json

代码语言:javascript
运行
复制
   {
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}

Program.cs ( .NetCore控制台应用程序)

代码语言:javascript
运行
复制
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核心WPF)

代码语言:javascript
运行
复制
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));
    }
}

参考资料:

票数 60
EN

Stack Overflow用户

发布于 2020-01-27 15:46:10

不需要切换到appsettings.json核心中的.NET文件。您仍然可以在WPF应用程序中使用相同的“旧的”基于XML的App.config文件,如果您愿意的话,该应用程序的目标是.NET核心。

只需向项目中添加一个新的配置文件( project ->Add >),并将其命名为"App.config“。如果然后向其添加以下内容:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <connectionStrings>
    <add name="connectionString" connectionString="..."/>
  </connectionStrings>
</configuration>

...you应该能够在运行时使用ConfigurationManager API获得连接字符串:

代码语言:javascript
运行
复制
ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;

默认情况下,默认的WPF模板应该包括System.Configuration.ConfigurationManager包。

票数 15
EN

Stack Overflow用户

发布于 2021-04-30 18:22:24

我找到了一条捷径。

  1. 安装软件包Microsoft.Extensions.Configuration.Json
  2. 在解决方案中创建AppSetting.json { "ConnectionStrings":{ "MyDataBase":ConnectionStrings}
  3. 创建方法GetConnectionString 公共字符串ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) GetConnectionString(string connectionStringName) { var builder =新的GetConnectionString .AddJsonFile("appsettings.json",可选: false,reloadOnChange: true);var configurationRoot = builder.Build();var connectionString = configurationRoot.GetConnectionString(connectionStringName);返回connectionString;}
  4. GetConnectionString在OnConfiguring中的调用方法 保护覆盖OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder);var connectionString = GetConnectionString("MyDataBase");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59909207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档