ASP.NET Core 指定环境发布(hosting environment)

本文详细介绍了ASP.NETCore应用程序发布过程中环境配置的重要性及如何通过设置ASPNETCORE_ENVIRONMENT环境变量实现不同环境下的自动配置加载,同时提供了在服务器上设置环境变量的方法,并通过实例展示了配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASP.NET Core 应用程序发布命令:

dotnet publish [<PROJECT>] [-f|--framework] [-r|--runtime] [-o|--output] [-c|--configuration] [--version-suffix] [-v|--verbosity] [-h|--help]

发布示例命令(生成在bin/release/netcoreapp1.1/publish目录下):

dotnet publish -c release

上面命令并没有指定EnvironmentName发布,什么意思呢?比如 ASP.NET Core 应用程序中的appsettings.json配置,测试环境和生产环境配置并不相同(比如数据库连接字符串),如果用上面的发布命令,我们还需要手动拷贝下不同环境的appsettings.json文件,以后要更改了,还需要再进行发布更新,很麻烦。

怎么解决上面的问题,很简单,指定下开发机或者服务器的ASPNETCORE_ENVIRONMENT环境变量,设置环境变量之后,执行dotnet *.dll启动程序的时候,ASP.NET Core 会自动加载此环境变量对应的appsettings.*.json文件,比如appsettings.Production.json

435188-20170601220200868-2112796119.png

其实,我们使用 VS 2017 F5 调试项目的时候,也会默认设置ASPNETCORE_ENVIRONMENT环境变量的,比如 ASP.NET Core 应用程序中的launchSettings.json示例配置:

"profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "AspNetCore.Samples": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:59522"
    }
}

Startup示例配置:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

因为上面配置中,ASPNETCORE_ENVIRONMENT设置的是Development,我们在使用 VS 2017 F5 调试项目,会加载和使用项目下的appsettings.Development.json配置文件,如果不存在此文件,ASP.NET Core 默认会使用appsettings.json配置文件。

那我们怎么在服务器上设置ASPNETCORE_ENVIRONMENT环境变量呢?很简单,敲个命令就可以了。

1. Windows 服务器设置

命令行:

>setx ASPNETCORE_ENVIRONMENT "Development"

SUCCESS: Specified value was saved.

或者(需要管理员权限)

>setx ASPNETCORE_ENVIRONMENT "Development" /M

SUCCESS: Specified value was saved.

PowerShell命令:

$Env:ASPNETCORE_ENVIRONMENT = "Prodction"

Windows 设置环境命令后,需要重新再开一个命令行dotnet *.dll启动项目,才会有效。

2. MacOS/Linux 服务器设置

命令行:

export ASPNETCORE_ENVIRONMENT=development 

dotnet *.dll启动项目的时候,我们可以看到当前的Hosting environment,以便检查是否正确,示例:

> dotnet AspNetCore.Samples.dll
Hosting environment: Prodtction
Content root path: C:\Users\yuezh\Desktop\Demo\AspNetCore.Samples
Now listening on: http://*:5003
Application started. Press Ctrl+C to shut down.

本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/asp-net-core-set-hosting-environment-with-publish.html,如需转载请自行联系原作者

<think>好的,用户想了解如何将ASP.NET Core应用程序进行打包和部署。我需要根据提供的引用资料来组织回答。首先,引用1提到了打包应用程序的三个关键步骤:编译代码、收集依赖项和设置配置。引用2详细说明了在Windows系统上的部署步骤,包括发布应用程序、配置IIS和安装运行时。引用3则提到了Linux上的部署,但资料可能不够详细,不过可以结合一般知识补充。 用户的问题可能涉及不同操作系统,所以需要分别说明Windows和Linux的部署方法。首先,打包部分应该包括发布命令、目标运行时和输出目录。然后部署到Windows需要配置IIS,安装Hosting Bundle,创建站点等步骤。Linux部分需要安装运行时、配置Nginx或Apache作为反向代理,设置服务自启动等。 另外,用户可能需要知道如何设置环境变量和配置文件,比如appsettings.json和启动配置。还要注意依赖项的处理,比如是否包含在发布输出中。可能还需要提到Docker部署作为另一种方式,但引用资料里没有,所以根据一般知识简要补充。 需要确保回答结构清晰,分步骤讲解,每个步骤有对应的命令或操作示例。同时,生成的相关问题要围绕打包和部署的扩展,比如性能优化、配置文件管理、不同环境差异处理等。最后,引用标识要正确对应,引用1、2、3分别对应不同的部分。</think>[用户可见层] ### ASP.NET Core应用程序打包与部署分步指南 #### 一、应用程序打包 1. **代码编译与发布** 使用`dotnet publish`命令打包应用程序: ```bash dotnet publish -c Release -r win-x64 --self-contained true -o ./publish ``` • `-c Release`指定Release模式编译 • `-r`指定目标运行时(如`linux-x64`或`win-x64`) • `--self-contained true`生成包含运行时的独立部署包[^1] 2. **依赖项收集** • 框架依赖部署:需在目标服务器安装对应.NET运行时 • 独立部署:所有依赖会打包到输出目录(增加包体积但无需安装运行时)[^2] 3. **配置设置** • 在`appsettings.json`中配置环境变量: ```json { "Environment": "Production" } ``` • 通过`ASPNETCORE_ENVIRONMENT`环境变量指定运行环境[^1] #### 二、Windows部署步骤 1. **IIS服务器配置** ```powershell # 安装Hosting Bundle https://dotnet.microsoft.com/download/dotnet-core/current/runtime ``` 2. **网站创建** • 在IIS管理器中添加网站 • 物理路径指向发布目录(如`D:\webapps\myapp`) • 绑定域名和端口 3. **应用池设置** • 选择"无托管代码"模式 • 设置Identity为高权限账户 #### 三、Linux部署流程(Ubuntu示例) 1. **环境准备** ```bash sudo apt-get update sudo apt-get install apt-transport-https wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb ``` 2. **安装运行时** ```bash sudo apt-get install dotnet-runtime-6.0 ``` 3. **部署配置** ```bash sudo cp -r ./publish /var/www/myapp sudo chmod -R 755 /var/www/myapp ``` 4. **Nginx反向代理** ```nginx server { listen 80; server_name example.com; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } ``` #### 四、部署验证 1. 检查服务状态: ```bash sudo systemctl status myapp.service ``` 2. 查看实时日志: ```bash journalctl -fu myapp.service ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值