[转]ASP.NET Core 指定环境发布(hosting environment)
2019-10-09 10:04 音乐让我说 阅读(898) 评论(0) 编辑 收藏 举报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
。
其实,我们使用 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.
参考资料:
- dotnet-publish
- Working with multiple environments
- How to set the hosting environment in ASP.NET Core
转载自:https://www.cnblogs.com/xishuai/p/asp-net-core-set-hosting-environment-with-publish.html
额外的
如何在ASP.NET Core中设置托管环境
在运行ASP.NET Core应用程序时,WebHostBuilder
会自动尝试确定它在哪个环境中运行。按照惯例,这将是中的一种Development
,Staging
或者Production
您可以将其设置为所需的任何字符串值。
将IHostingEnvironment
允许您以编程方式检索当前的环境,让你可以有特定的环境行为。例如,您可以在Production
环境中启用资产的捆绑和最小化,而在环境中提供不变的文件Development
。
在本文中,我将展示如何使用Windows和OS X上的环境变量,使用Visual Studio和Visual Studio Code或使用命令行参数来更改ASP.NET Core使用的当前托管环境。
更改托管环境
ASP.NET Core使用ASPNETCORE_ENVIRONMENT
环境变量来确定当前环境。默认情况下,如果您在不设置此值的情况下运行应用程序,它将自动默认为Production
环境。
当您使用来运行应用程序时dotnet run
,控制台输出会在输出中列出当前的托管环境:
> dotnet run
Project TestApp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: C:\Projects\TestApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
设置此环境变量的方法有很多种,最好的方法取决于您如何构建和运行应用程序。
在Windows中设置环境变量
更改环境的最明显方法是更新计算机上的环境变量。如果你知道,例如这是有用的,即应用程序的机器上运行总是会在一个给定的环境下,无论是Development
,Staging
或Production
。
在Windows上,有多种方法可以更改环境变量,具体取决于您最喜欢的环境。
在命令行
setx.exe
从Vista开始,您可以使用Windows附带的命令从命令提示符轻松设置环境变量。您可以使用它轻松设置用户变量:
>setx ASPNETCORE_ENVIRONMENT "Development"
SUCCESS: Specified value was saved.
请注意,在当前打开的窗口中未设置环境变量。您将需要打开一个新的命令提示符以查看更新的环境。如果打开管理命令提示符并添加/M
开关,也可以设置系统变量(而不仅仅是用户变量):
>setx ASPNETCORE_ENVIRONMENT "Development" /M
SUCCESS: Specified value was saved.
使用PowerShell
或者,您可以使用PowerShell设置变量。在PowerShell中,以及普通用户和系统变量,还可以使用以下$Env:
命令创建一个临时变量:
$Env:ASPNETCORE_ENVIRONMENT = "Development"
创建的变量仅在PowerShell会话期间持续存在-关闭窗口后,环境将恢复为默认值。
或者,您可以直接设置用户或系统环境变量。此方法不会在当前会话中更改环境变量,因此您将需要打开一个新的PowerShell窗口以查看所做的更改。与以前一样,更改system(Machine
)变量将需要管理权限
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "User")
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")
使用Windows控制面板
如果您不喜欢命令提示符,则可以使用鼠标轻松地更新变量!单击Windows的开始菜单按钮(或按Windows键),搜索environment variables
,然后选择编辑帐户的环境变量:
选择此选项将打开“ 系统属性”对话框:
单击环境变量以查看系统上当前环境变量的列表。
假设您还没有名为的变量ASPNETCORE_ENVIRONMENT
,请单击“ 新建...”按钮并添加一个新的帐户环境变量:
单击确定保存所有更改。您将需要重新打开所有命令窗口,以确保加载了新的环境变量。
在OS X上设置环境变量
您可以通过.bash_profile
在您喜欢的编辑器中编辑或创建文件来在OS X上设置环境变量(我正在使用nano
):
$ nano ~/.bash_profile
然后可以导出ASPNETCORE_ENVIRONMENT
变量。该变量不会在当前会话中设置,但是在打开新的终端窗口时将被更新:
export ASPNETCORE_ENVIRONMENT=development
重要的是,该命令必须与上面所编写的一样-命令的两侧都不能有空格=
。另请注意,我对bash的知识还很差,因此,如果这种方法对您不起作用,我鼓励您使用Google谷歌搜索可做的事情:)
使用IDE配置托管环境
除了更新用户或系统环境变量外,您还可以从IDE中配置环境,以便从那里运行或调试应用程序时,它将使用正确的环境。
Visual Studio LaunchSettings.json
使用Visual Studio模板创建ASP.NET Core应用程序时,它将自动创建launchSettings.json文件。在Visual Studio中使用F5进行调试时,此文件用作Debug目标的提供程序:
使用这些选项之一运行时,Visual Studio将设置指定的环境变量。在下面的文件中,您可以看到ASPNETCORE_ENVIRONMENT
变量设置为Development
。
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53980/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"TestApp": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
您也可以使用项目“ 属性”窗口来编辑此文件。只需双击解决方案中的“ 属性”节点,然后选择“ 调试”选项卡:
Visual Studio代码launch.json
如果使用的是Visual Studio Code,则有一个类似的文件launch.json,它是在您首次调试应用程序时添加的。该文件包含许多配置,应调用其中一种".NET Core Launch (web)"
。使用此命令启动时,可以通过向env
属性添加键来设置其他环境变量:
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceRoot}/bin/Debug/netcoreapp1.0/TestApp.dll",
"args": [],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"launchBrowser": {
"enabled": true,
"args": "${auto-detect-url}",
"windows": {
"command": "cmd.exe",
"args": "/C start ${auto-detect-url}"
},
"osx": {
"command": "open"
},
"linux": {
"command": "xdg-open"
}
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceRoot}/Views"
}
}
]
}
使用命令args设置托管环境
根据您的配置方式WebHostBuilder
,您还可以通过提供命令行参数来指定环境。这样做,您需要使用ConfigurationBuilder
使用Microsoft.Extensions.Configuration.CommandLine包中的AddCommandLine()
扩展方法的。然后,您可以将配置传递给using :WebHostBuilder
UseConfiguration(config)
var config = new ConfigurationBuilder()
.AddCommandLine(args)
.Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseKestrel()
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
这使您可以使用以下--environment
参数在运行时指定托管环境:
> dotnet run --environment "Staging"
Project TestApp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Staging
Content root path: C:\Projects\Repos\Stormfront.Support\src\Stormfront.Support
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
摘要
在这篇文章中,我展示了许多方法可以指定当前正在运行的环境。哪种方法最好取决于您的设置和要求。无论您选择哪种方式,如果更改环境变量,您都将需要重新启动Kestrel服务器,因为环境是服务器启动的一部分。
更改托管环境使您可以在运行时以不同的方式配置应用程序,从而在开发设置中启用调试工具或在生产环境中进行优化。有关使用该IHostingEnvironment
服务的详细信息,请在此处查阅文档。
最后一点-环境变量的情况下在敏感的,所以你可以使用"Development"
,"development"
或者"DEVELOPMENT"
你的心脏的内容。
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2013-10-09 跨域名 Cookie 传递测试
2012-10-09 老赵面试题“我在面试.NET/C#程序员时会提出的问题”题目及参考答案