ASP.NetCore 2.2,VisualStudio 2019
我试图弄清楚如何将web.config
文件转换为appsettings.json
,但缺少内容。
我有一个startup.cs
文件,看起来像(为简洁起见编辑):
using System;
using MyCoolApp.Models.Commodities;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Rewrite;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace MyCoolApp {
public class Startup {
public Startup(IHostingEnvironment env) {
var builder = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
private IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services) {
services.AddDistributedMemoryCache();
services.Configure<IISServerOptions>(
options => {
options.AutomaticAuthentication = false;
}
);
services.AddMvc().SetCompatibilityVersion(
CompatibilityVersion.Version_2_2
);
var foo = Configuration.GetConnectionString("CommoditiesContext");
services.AddDbContext<CommoditiesContext>(
options => options.UseSqlServer(
Configuration.GetConnectionString("CommoditiesContext")
)
);
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
...
}
}
}
注意var foo = Configuration.GetConnectionString(...)
行。
我有一个web.config
文件,看起来像(经过大量编辑):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="CommoditiesContext" connectionString="Server=mydb.company.com;Initial Catalog=Things;Integrated Security=True;providerName=System.Data.SqlClient;" />
</connectionStrings>
</configuration>
我已将其转换为“顶级” appsettings.json
文件:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"connectionStrings": {
"CommoditiesContext": "Server=mydb.company.com;Initial Catalog=Things;Integrated Security=True;providerName=System.Data.SqlClient;"
}
}
我有一个appsettings.Development.json
文件,看起来像:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"location": {
"path": ".",
"inheritInChildApplications": "false",
"system.webServer": {
"handlers": [],
"aspNetCore": {
"processPath": "%LAUNCHER_PATH%",
"arguments": "%LAUNCHER_ARGS%",
"stdoutLogEnabled": "true",
"stdoutLogFile": ".\\logs\\stdout",
"hostingModel": "InProcess",
"environmentVariables": [
{
"name": "ASPNETCORE_HTTPS_PORT",
"value": "44375"
},
{
"name": "ASPNETCORE_ENVIRONMENT",
"value": "Development"
},
{
"name": "COMPLUS_ForceENC",
"value": "1"
}
],
"handlerSettings": [
{
"name": "debugFile",
"value": "aspnetcore-debug.log"
},
{
"name": "debugLevel",
"value": "FILE,TRACE"
}
]
},
"modules": [],
"isapiFilters": []
}
}
}
我也有一个“ Production 1”,但让我们暂时限制噪音。
目前,我的问题是,当我在本地调试时,可以在services.AddDbContext
的{{1}}行上设置一个bp,然后查看startup.cs
的值。是foo
。我或者null
文件的结构不正确,或者读取的配置信息不正确,但是我不知道哪个。
我想念什么?
修改
appsettings.json
program.cs
答案 0 :(得分:3)
问题是您在启动构造函数中为配置设置了错误的基本路径。 AppDomain.CurrentDomain.BaseDirectory
将为您提供错误的位置,因此将不会加载配置文件。相反,请考虑改用System.IO.Directory.GetCurrentDirectory()
。
答案 1 :(得分:1)
从您的代码(startup.cs)中获取
var builder = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
.AddEnvironmentVariables();
Configuration = builder.Build();
编辑:正如柯克在评论中所指出的
您需要这样替换
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
为什么?因为如果您在Program.cs类中有此
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
那么您就不需要设置自己了
基于ASP.NET Core dotnet的默认配置Web应用程序new 模板在构建主机时调用CreateDefaultBuilder。 CreateDefaultBuilder在以下位置为应用提供默认配置: 以下顺序:
以下内容适用于使用Web Host的应用程序。有关的详细信息 使用通用主机时的默认配置,请参阅最新的 该主题的版本。
主机配置提供自:前缀为环境变量 使用ASPNETCORE_(例如ASPNETCORE_ENVIRONMENT)使用 环境变量配置提供程序。前缀(ASPNETCORE_) 加载配置键值对时会被剥离。 使用命令行配置提供程序的命令行参数。 使用以下文件从以下位置提供应用程序配置:appsettings.json 配置提供程序。 appsettings。{Environment} .json使用文件 配置提供程序。当应用程式在 使用入口程序集的开发环境。环境 使用环境变量配置提供程序的变量。 使用命令行配置提供程序的命令行参数。
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2