[英]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;
我找到了一條捷徑。
安裝包 Microsoft.Extensions.Configuration.Json
在解決方案中創建 AppSetting.json
{ "ConnectionStrings": { "MyDataBase": "Server=(localdb)\\\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;" } }
創建方法 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; }
在 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.