如果我有两个设置文件
appSettings.json和appSettings.Development.json
当我使用从Visual Studio中发布时,是否都应该将两者都复制到目标文件夹?我不确定,因为它们在我发布时都显示在目标文件夹中(在开发服务器上)。我的印象是,它们在构建时结合在一起,并且仅发布了appSettings.json文件。如果没有,那么我是否需要考虑手动编码这些差异(如我在几个示例中看到的那样)?
例如本示例通过代码加载设置(不是我是如何做到的)
注意-他们正在使用环境名称ASPNETCORE_ENVIRONMENT设置
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
我的一些Startup类如下所示。
注意:我没有引用环境设置。
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// In production, the Angular files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
}
[更新]
我在这里找到了答案-我缺少的关键是更新csproj文件以获取与环境相关的发布设置。
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2#configuration-with-webconfig
因此,我假设如果我有几个不同的环境,每个环境都有自己的设置文件,那么发布会导致将所有环境都放到目标目录中?
答案 0 :(得分:0)
与ASP.NET Core有点混淆,尤其是如果您以前使用过ASP.NET的话。生成配置(调试,发行版)实际上与ASP.NET Core发生的一切无关。 ASP.NET Core应用程序在技术上与环境无关。对于较旧的ASP.NET应用程序,您必须针对特定环境进行发布,而从理论上讲,您可以将相同的ASP.NET Core发布并在任何环境中运行。当然,这是因为ASP.NET Core没有利用Web.config。
因此,这就是为什么所有特定于环境的JSON文件都会随之而来的原因。最终使用的是基于运行时设置的ASPNETCORE_ENVIRONMENT
环境变量的值,而不是发布时选择的构建配置。考虑一下,这实际上真的很棒。您可以使用同一发布的应用程序,在“暂存”环境中运行该应用程序以确保一切正常,然后仅通过确保每个环境都具有适用于ASPNETCORE_ENVIRONMENT
设置的值来将其部署到您的“生产”环境中。这使得发布管道变得微不足道。
也就是说,仍然可以使用#if DEBUG
编译器指令之类的东西,如果执行 ,则ASP.NET Core应用程序中的内容会有所不同,具体取决于构建选择的配置,但您实际上应该首先避免这样做。通常,您应该仅依靠ASP.NET Core应用程序中的IHostingEnvironment
抽象来确定在什么环境中会发生什么。