如何在发布文件中设置aspnetcore_environment?

问题描述 投票:0回答:6

我有 ASP.NET Core 应用程序(Web Api)。文档解释了在多种环境下工作,但是没有解释如何在发布网站时设置

aspnetcore_environment

假设我有 3 个环境

Development
Staging
Production

  1. 在经典的 ASP.NET Web 应用程序中,我曾经创建 3 个构建配置。

    Development
    Staging
    Production
    (如下图所示)。然后是 3 个
    .pubxml
    文件,每个配置一个。我是否也需要对
    ASP.NET Core
    应用程序使用相同的方法?

  2. 如何在

    aspnetcore_environment
    文件中设置
    .pubxml

  3. 如果问题 1 中指定的方法已过时,那么替代方法是什么? (我使用 Jenkins 进行 CI)

更新1

我知道我必须设置

ASPNETCORE_ENVIRONMENT
但是我不明白我们在哪里设置它?在开发过程中,我可以在
launchSettings.json
的配置文件中设置它,但是问题是在发布到暂存或生产时我们如何设置它?我们是否在目标服务器本身上设置环境变量?

更新2
我发现文章here解释了设置环境变量的不同方法。这部分回答了我的问题。但是,当我发布应用程序时,发布过程在发布时不支持环境变量

appsettings.{env.EnvironmentName}.json

我已经为这个问题创建了单独的post

configuration asp.net-core .net-core asp.net-core-1.0 coreclr
6个回答
66
投票
您可以使用以下方法将所需的 ASPNETCORE_ENVIRONMENT 作为参数传递到 dotnetpublish 命令中:

/p:EnvironmentName=Staging



例如

dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging



这将生成带有为您的项目指定的正确环境的 web.config:

<environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables>
    

45
投票
我有同样的需求,我想出了以下解决方案。这适用于自动化部署,并且需要较少的配置更改。

1。使用 dotnetpublish 的命令行选项

此外,我们可以将属性

EnvironmentName

 作为命令行选项传递给 
dotnet publish
 命令。以下命令将在 web.config 文件中包含环境变量 
Development

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development


2。在发布配置文件中添加环境名称属性。

我们也可以在发布配置文件中添加

<EnvironmentName>

 属性。打开位于 
Properties/PublishProfiles/{profilename.pubxml}
 的发布配置文件,这将在项目发布时在 web.config 中设置环境名称。更多详情
这里

<PropertyGroup> <EnvironmentName>Development</EnvironmentName> </PropertyGroup>

如上图所示,可以为每个配置添加环境,并且可以在每个 *.pubxml 文件中更改

EnvironmentName

 属性的名称。

3.修改项目文件(.CsProj)文件

MSBuild 支持

EnvironmentName

 属性,它可以帮助根据您希望部署的环境设置正确的环境变量。环境名称将在发布阶段添加到 web.config 中。

只需打开项目文件 (*.csProj) 并添加以下 XML。

<!-- Custom Property Group added to add the Environment name during publish The EnvironmentName property is used during the publish for the Environment variable in web.config --> <PropertyGroup Condition=" '$(Configuration)' == '' Or '$(Configuration)' == 'Debug'"> <EnvironmentName>Development</EnvironmentName> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' != '' AND '$(Configuration)' != 'Debug' "> <EnvironmentName>'$(Configuration)'</EnvironmentName> </PropertyGroup>
上面的代码会将环境名称添加为 

Development

 空或 
Debug
 配置。对于任何其他配置,环境名称将从所选的配置中选取。这将添加具有所需配置的 
ASPNETCORE_ENVIRONMENT
 环境。您可以通过更新 CsProj 文件来根据需要修改环境名称的逻辑。更多详情
这里


23
投票
在 IIS 下托管应用程序时,您可以在 web.config 中设置环境变量。

https://learn.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

要在发布时生成它,请将 web.config 添加到项目的根目录,“dotnetpublish”将使用此文件作为在发布文件夹中生成的文件的基础。然后您可以更改部署系统中的值。

<?xml version="1.0" encoding="utf-8" ?> <!-- Used to overwrite settings web.config generated by "dotnet publish", Only used when hosting under IIS --> <configuration> <system.webServer> <aspNetCore stdoutLogEnabled="true"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables> </aspNetCore> </system.webServer> </configuration>
    

1
投票
我认为你不能在发布配置文件中执行此操作。您必须设置环境变量,例如ASPNETCORE_ENVIRONMENT = 暂存。 我必须对 Azure 上的 aspnet core Web 应用程序执行类似的操作。我想要进行开发、登台和制作。我所做的就是使用 env 变量。


0
投票
要设置两个或更多配置文件,您需要创建其他配置文件,如链接文章

中提到的,并且您的launchSettings.json

将包含一个数组:

"profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express (Staging)": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Staging" } } }

为了能够读取环境变量,您需要

在启动期间指定它并且调用附加方法AddEnvironmentVariables

对变量采取行动:

public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) // general properties .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) // specify the environment-based properties .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) // do not forget to add environment variables to your config! .AddEnvironmentVariables(); Configuration = builder.Build(); } }
    

0
投票
在 Visual Studio IDE 中设置的简单方法。

项目 > 属性 > 调试 > 环境变量

请勿使用机器级别的环境变量代替范围 对于该应用程序,其他应用程序有可能执行此操作 同样,更改可能会影响其他应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.