如何设置ASPNETCORE_ENVIRONMENT以考虑发布asp.net核心应用程序?

时间:2017-01-09 11:24:38

标签: asp.net-core environment-variables production-environment

当我将我的asp.net核心Web应用程序发布到我的本地文件系统时,它总是需要生成配置和ASPNETCORE_ENVIRONMENT变量,其值为"生产"。

我如何以及在何处设置ASPNETCORE_ENVIRONMENT变量的值,以便不仅可以将其视为调试,还可以将视为发布?我已经尝试了以下选项但没有成功:

  • 在Windows设置中
  • 在.pubxml文件中
  • 在launchSettings.json
  • in project.json

14 个答案:

答案 0 :(得分:37)

<强>选项1:

在Windows中设置ASPNETCORE_ENVIRONMENT环境变量

命令行 - setx ASPNETCORE_ENVIRONMENT "Development"

PowerShell - $Env:ASPNETCORE_ENVIRONMENT = "Development"

对于其他操作系统,请参阅 - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments

<强>选项2:

如果您想使用web.config设置ASPNETCORE_ENVIRONMENT,请像这样添加aspNetCore -

<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\MyApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

答案 1 :(得分:18)

在visual studio IDE中设置它的简单方法。

项目&gt;性状&gt;调试&gt;环境变量

enter image description here

答案 2 :(得分:15)

除上述选项外,还有其他一些解决方案。

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>Production</EnvironmentName>
  </PropertyGroup>

以上代码将为调试配置或未指定配置添加环境名称为Development。对于任何其他配置,在生成的web.config文件中,环境名称将为Production。更多详细信息here

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

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

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

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

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

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

答案 3 :(得分:12)

您应该使用<aspNetCore processPath="dotnet" arguments=".\MyApp.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\aspnetcore-stdout"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" /> <environmentVariable name="CONFIG_DIR" value="f:\application_config" /> </environmentVariables> </aspNetCore> 跟踪instructions provided in the documentation

{{1}}

请注意,您也可以设置其他环境变量。

  

ASP.NET核心模块允许您为其指定环境变量   processPath属性中指定的进程通过指定它们   在一个或多个环境中的可变子元素   aspNetCore元素下的environmentVariables集合元素。   本节中设置的环境变量优先于系统   该过程的环境变量。

答案 4 :(得分:5)

使用最新版本的dotnet cli(2.1.400或更高版本),您只需设置此msbuild属性$(EnvironmentName),然后发布工具将负责使用环境名称将ASPNETCORE_ENVIRONMENT添加到web.config中。

此外,从2.2.100-preview1开始可以使用XDT。

示例:https://github.com/vijayrkn/webconfigtransform/blob/master/README.md

答案 5 :(得分:2)

与其硬连线开发设置,不如将其添加到您的 # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00007fc4ec043340, pid=1143, tid=0x00007fc4bcb85700 # # JRE version: Java(TM) SE Runtime Environment (8.0_102-b14) (build 1.8.0.102-b14) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.102-b14 mixed mode linux-amd64 compressed oops) # Problematic frame: # C 0x00007fc4ec043340 # # Core dump written. Default location: /home/fportal/jaxx/leo/tomcat-7.0.42/bin/core or core.1143 # # An error report file with more information is saved as: # /home/fportal/jaxx/leo/tomcat-7.0.42/bin/hs_err_pid1143.log Compiled method (c1) -1570440943 731555909 ! 1 java.text.SimpleDateFormat::subParse (1765 bytes) 中:

.csproj

答案 6 :(得分:1)

我不得不手动将这段代码添加到我的主要方法中。这将基于 Azure 的应用设置来构建环境

bcrypt(request()->password)

答案 7 :(得分:0)

通过在Azure platorm上直接设置此变量(如果使用它),我发现它对我有用。只需选择您的Web应用程序->配置->应用程序设置,然后添加变量及其值,然后按保存按钮即可。

答案 8 :(得分:0)

此变量可以保存在json中。例如envsettings.json 内容如下

  {
   // Possible string values reported below. When empty it use ENV variable value or 
     // Visual Studio setting.
     // - Production
     // - Staging
     // - Test
     // - Development

   "ASPNETCORE_ENVIRONMENT": "Development"
  }

稍后按如下所示修改program.cs

  public class Program
  {
    public static IConfiguration Configuration { get; set; }
    public static void Main(string[] args)
    {
        var currentDirectoryPath = Directory.GetCurrentDirectory();
        var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
        var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
        var environmentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();

        var builder = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json");

        Configuration = builder.Build();
          var webHostBuilder = new WebHostBuilder()
            .UseKestrel()
            .CaptureStartupErrors(true)
            .UseContentRoot(currentDirectoryPath)
            .UseIISIntegration()
            .UseStartup<Startup>();

        // If none is set it use Operative System hosting enviroment
        if (!string.IsNullOrWhiteSpace(environmentValue))
        {
            webHostBuilder.UseEnvironment(environmentValue);
        }

        var host = webHostBuilder.Build();

        host.Run();
     }
 }

这样,它将始终包含在发布中,并且您可以根据托管网站的环境将其更改为所需的值。 由于更改在Program.cs

中,因此也可以在控制台应用中使用此方法

答案 9 :(得分:0)

为了在每个站点上设置环境,我们在项目中使用的其他选项是将Parameters.xml文件添加到项目中,其内容如下:

<parameters>
      <parameter name="IIS Web Application Name" defaultValue="MyApp" tags="IisApp" />    
      <parameter name="Environment" description="Environment" tags="">
        <parameterEntry kind="XmlFile" scope="Web.config"  match="/configuration/location/system.webServer/aspNetCore/environmentVariables/environmentVariable[@name='ASPNETCORE_ENVIRONMENT']/@value" />
      </parameter>    
</parameters>

此文件的构建操作为 Content ,而复制操作为 Copy If Newer ,因此它将成为要部署的软件包的一部分。

然后,要部署程序包并设置环境,请在发行版中的“ WinRM-IIS Web App Deployment”任务下(它在使用“ IIS Web App deploy”任务时同样有效)下进行设置msdeploy的参数:

-setParam:kind=ProviderPath,scope=contentPath,value="MySite" -setParam:name="Environment",value="Stage"

这样,我们可以拥有多个版本,全部使用相同的工件,但部署为不同的环境。

答案 10 :(得分:0)

我知道这是一篇过时的文章,但是由于没有人建议,我认为我会将简单的解决方案加入其中。

我使用当前目录来确定当前环境,然后翻转连接字符串和环境变量。只要您对站点文件夹(如test / beta / sandbox)有一个命名约定,此方法就很好用。

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var dir = Environment.CurrentDirectory;
        string connectionString;

        if (dir.Contains("test", StringComparison.OrdinalIgnoreCase))
        {
            connectionString = new ConnectionStringBuilder(server: "xxx", database: "xxx").ConnectionString;
            Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");
        }
        else
        {
            connectionString = new ConnectionStringBuilder(server: "xxx", database: "xxx").ConnectionString;
            Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Production");
        }

        optionsBuilder.UseSqlServer(connectionString);
        optionsBuilder.UseLazyLoadingProxies();
        optionsBuilder.EnableSensitiveDataLogging();
    }

答案 11 :(得分:0)

  1. 创建您的appsettings。*。json文件。 (例如:appsettings.Development.json,appsettings.Staging.json,appsettings.Production.json)

  2. 将变量添加到这些文件中。

  3. 像往常一样为每个环境创建一个单独的发布配置文件。

  4. 打开PublishProfiles / Development.pubxml(命名将基于您命名的Publish Profile)。

  5. 只需在 PublishProfile 中添加标签以设置 EnvironmentName 变量,其余的appsettings。*。json文件命名约定就可以完成。

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

参考:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-3.1

请参阅“设置环境”部分。

答案 12 :(得分:0)

如果您在 Windows、Linux 或 Mac 上使用 RIDER IDE(来自 JetBrains):

  • 点击添加配置
  • enter image description here
  • 在模式窗口中,单击位于左栏中的添加新...
  • modal window with no configuration
  • 选择 .Net 项目(模板将取决于您的项目类型)
  • 环境变量字段中,单击右侧的文档图标;
  • Environment field in .Net Project modal window.
  • 在新窗口中,点击 + 以创建一个新的环境变量,您将在其中输入键/值 ASPNETCORE_ENVIRONMENT/Development ;
  • Adding new Environment Variable.
  • 点击窗口右下角的确定。
  • 点击窗口右下角的应用。

Rider 已包含项目的启动设置,并将其设置为项目调试和运行的默认设置。 environment settings concluded and default

答案 13 :(得分:-2)

这是我们在运行时设置的方式:

public class Program
{
    public static void Main(string[] args)
    {
        Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");

        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}