Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Configuration 如何在发布文件中设置aspnetcore_环境?_Configuration_Asp.net Core_.net Core_Asp.net Core 1.0_Coreclr - Fatal编程技术网

Configuration 如何在发布文件中设置aspnetcore_环境?

Configuration 如何在发布文件中设置aspnetcore_环境?,configuration,asp.net-core,.net-core,asp.net-core-1.0,coreclr,Configuration,Asp.net Core,.net Core,Asp.net Core 1.0,Coreclr,我有ASP.NET核心应用程序(Web Api)。文档已经解释过,但是没有解释在发布网站时如何设置aspnetcore\u环境 假设我有3个环境开发,登台和生产 在经典的ASP.NET Web应用程序中,我曾经创建过3个构建配置开发,阶段和生产(如下图所示)。然后是3个.pubxml文件,每个配置一个。我是否也需要对ASP.NET核心应用程序使用相同的方法 如何在.pubxml文件中设置aspnetcore\u环境 如果问题1中指定的方法已过时,那么替代方法是什么?(我在CI中使用Jenkins

我有ASP.NET核心应用程序(Web Api)。文档已经解释过,但是没有解释在发布网站时如何设置
aspnetcore\u环境

假设我有3个环境
开发
登台
生产

  • 在经典的ASP.NET Web应用程序中,我曾经创建过3个构建配置<代码>开发,
    阶段
    生产
    (如下图所示)。然后是3个
    .pubxml
    文件,每个配置一个。我是否也需要对ASP.NET核心应用程序使用相同的方法

  • 如何在
    .pubxml
    文件中设置
    aspnetcore\u环境

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

  • 更新1

    我知道我必须设置
    ASPNETCORE\u环境
    ,但我不知道在哪里设置?在开发过程中,我可以在
    launchSettings.json
    中的概要文件中设置这一点,但问题是,当发布到暂存或生产时,我们如何设置这一点?我们是否在目标服务器本身上设置环境变量

    更新2
    我发现一篇文章解释了设置环境变量的不同方法。这部分回答了我的问题。但是,当我发布应用程序时,发布过程在发布
    appsettings.{env.EnvironmentName}.json


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

    我想你不能在发布配置文件中这样做。您必须设置环境变量,例如ASPNETCORE_environment=Staging。
    我不得不在Azure上的aspnet核心web应用程序上做类似的事情。我想要开发、舞台和制作。我的做法就是使用env变量。

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

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


    要设置两个或多个配置文件,您需要创建其他配置文件,如,以及您的
    启动设置。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();
        }
    }
    

    在VisualStudioIDE中设置它的简单方法

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

    请不要使用机器级别的环境变量,而应使用作用域 对于该应用程序,存在其他应用程序执行此操作的可能性 同样,更改可能会影响其他应用程序


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

    /p:EnvironmentName=Staging

    e、 g。
    dotnet发布/p:Configuration=Release/p:EnvironmentName=Staging

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

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

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

    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>
    

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

    3。使用dotnet发布的命令行选项

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


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

    的可能副本。这个问题已经在那里得到了回答。只需使用commandline/powershell/bash/azureportal设置一个环境变量,然后您必须创建多个web.config,每个web.config用于支持的环境,如开发、uat、prod等。我在本文中找到了答案,所以您可以在应用程序级别直接在IIS中设置环境变量,具体取决于用例,如果它是一个公司环境,您无法控制托管服务器,那么通过web.config进行操作可能是最好的选择,因为让某人更新IIS配置或用户环境可能需要很长的过程。如果您确实可以控制服务器设置,那么环境变量可能是更好的选择。如何在部署期间动态更改该值?发布会处理吗?@LP13这是关键,不是吗。我在开发和登台方面没有问题——开发是本地的,登台是在一个单独的IIS服务器上的——但是这个答案不能帮助我在第三台服务器上进行生产。需要修改配置文件吗?这在发布中肯定没有用?这是为了在本地启动它。它对持续集成非常有用#2这里是真正的答案。对我来说#2也是答案,但需要滚动和阅读很多,然后最终找到它Microsoft文档#2不幸不适合我:/I必须编辑web.config directl
    <PropertyGroup>
      <EnvironmentName>Development</EnvironmentName>
    </PropertyGroup>