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

LP1*_*P13 29 configuration .net-core coreclr asp.net-core asp.net-core-1.0

我有ASP.NET核心应用程序(Web Api).该文档解释了如何使用多个环境,但是它无法解释aspnetcore_environment在发布网站时如何设置.

因此,可以说,如果我有3个环境Development,StagingProduction

  1. 在经典的ASP.NET Web应用程序中,我用来创建3个构建配置.Development,StagingProduction(如下图所示).然后是3个.pubxml文件,每个配置一个.我是否也需要使用相同的方法进行ASP.NET Core应用?

  2. 如何设置aspnetcore_environment.pubxml文件?

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

在此输入图像描述

更新1

我知道我必须设置ASPNETCORE_ENVIRONMENT但是我无法理解我们在哪里设置它?在开发过程中,我可以在配置文件中设置它launchSettings.json,但问题是我们如何在发布到分段或生产时设置它?我们在目标服务器上设置环境变量吗?

在此输入图像描述

更新2
我在这里找到了解释设置环境变量的不同方法的文章.这部分回答了我的问题.但是,当我发布应用程序时,发布过程不会在发布时遵循环境变量appsettings.{env.EnvironmentName}.json
我已为该问题创建了单独的帖子

小智 20

您可以使用以下命令将所需的ASPNETCORE_ENVIRONMENT作为参数传递到dotnet publish命令:

/p:EnvironmentName=Staging

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

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

    <environmentVariables>
      <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
    </environmentVariables>
Run Code Online (Sandbox Code Playgroud)

  • 可以在发布配置文件中以某种方式设置它吗? (3认同)
  • 是的@Muflix。在我的.pubxml文件中添加`&lt;EnvironmentName&gt; Staging &lt;/ EnvironmentName&gt;`对web.config文件具有相同的效果。 (2认同)

小智 18

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

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

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

<?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>
Run Code Online (Sandbox Code Playgroud)

  • 如何在部署期间动态更改值?发布会照顾它吗? (3认同)

Abh*_*dha 9

我有相同的要求,因此提出了以下解决方案。这在自动部署中效果很好,并且所需的配置更改更少。

1.修改项目文件(.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>
Run Code Online (Sandbox Code Playgroud)

上面的代码将添加环境名称,如Development空白或Debug配置。对于任何其他配置,将从选择的配置中选择环境名称。这将为ASPNETCORE_ENVIRONMENT环境添加所需的配置。您可以通过更新CsProj文件来根据需要修改环境名称的逻辑。在这里更多细节

2.在发布配置文件中添加EnvironmentName属性。

我们也可以<EnvironmentName>在发布配置文件中添加该属性。打开位于该位置的发布配置文件。Properties/PublishProfiles/{profilename.pubxml}这将在发布项目时在web.config中设置环境名称。此处有更多详细信息

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

3.使用dotnet publish的命令行选项

另外,我们可以将该属性EnvironmentName作为命令行选项传递给dotnet publish命令。接下来的命令将包含Developmentweb.config文件中的环境变量。

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

  • #2 这是真正的答案。 (5认同)
  • #2 也是我的答案,但需要滚动和阅读大量内容,然后最终在 Microsoft Docs https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/ 中找到它aspnet-core-module?view=aspnetcore-2.2#setting-environment-variables (2认同)
  • #2 工作得很好,因为它在发布过程中修改了 web.config 并更改了 ASPNETCORE_ENVIRONMENT 值。 (2认同)

reg*_*uld 1

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