Configuration 如何在发布文件中设置aspnetcore_环境?
我有ASP.NET核心应用程序(Web Api)。文档已经解释过,但是没有解释在发布网站时如何设置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
aspnetcore\u环境
假设我有3个环境开发
,登台
和生产
阶段
和生产
(如下图所示)。然后是3个.pubxml
文件,每个配置一个。我是否也需要对ASP.NET核心应用程序使用相同的方法.pubxml
文件中设置aspnetcore\u环境
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>