Dar*_*rio 77 environment-variables production-environment asp.net-core
当我将我的asp.net核心Web应用程序发布到我的本地文件系统时,它总是需要使用value ="Production"的production-config和ASPNETCORE_ENVIRONMENT变量.
如何以及在何处设置ASPNETCORE_ENVIRONMENT变量的值,以便它不仅可以用于调试,还可以用于发布?我已经尝试了以下选项但没有成功:
San*_*ket 50
选项1:
要在Windows中设置ASPNETCORE_ENVIRONMENT环境变量,
命令行 - setx ASPNETCORE_ENVIRONMENT "Development"
电源外壳 - $Env:ASPNETCORE_ENVIRONMENT = "Development"
对于其他操作系统,请参阅此 - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments
选项2:
如果您想使用ASPNETCORE_ENVIRONMENT设置,web.config
那么添加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>
Run Code Online (Sandbox Code Playgroud)
Abh*_*dha 46
除上述选项外,还有其他一些解决方案。
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>
Run Code Online (Sandbox Code Playgroud)
上面的代码将为Development
Debug配置或未指定配置添加环境名称。对于任何其他配置,环境名称将Production
在生成的web.config文件中。在这里更多细节
2.在发布配置文件中添加EnvironmentName属性。
我们也可以<EnvironmentName>
在发布配置文件中添加该属性。打开位于该位置的发布配置文件。Properties/PublishProfiles/{profilename.pubxml}
这将在发布项目时在web.config中设置环境名称。此处有更多详细信息
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
3.使用dotnet publish的命令行选项
另外,我们可以将该属性EnvironmentName
作为命令行选项传递给dotnet publish
命令。接下来的命令将包含Development
web.config文件中的环境变量。
dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
Mar*_*eio 26
在visual studio IDE中设置它的简单方法.
项目>属性>调试>环境变量
Mig*_*ill 24
这是我们在运行时设置它的方式:
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();
}
Run Code Online (Sandbox Code Playgroud)
eli*_*oxy 17
创建您的appsettings.*.json文件。(示例:appsettings.Development.json、appsettings.Staging.json和appsettings.Production.json)
将您的变量添加到这些文件中。
像往常一样,为每个环境创建一个单独的发布配置文件。
打开PublishProfiles/Development.pubxml文件(命名将基于您命名发布配置文件的内容)。
只需在PublishProfile 中添加一个标签来设置EnvironmentName变量,剩下的工作由appsettings.*.json文件命名约定完成。
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
参考:用于 ASP.NET Core 应用程序部署的 Visual Studio 发布配置文件 (.pubxml)
请参阅“设置环境”部分。
Dav*_*ine 16
您应该按照文档中提供的说明使用web.config
.
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以设置其他环境变量.
ASP.NET核心模块允许您通过在aspNetCore元素下的environmentVariables集合元素的一个或多个environmentVariable子元素中指定它们来为processPath属性中指定的进程指定环境变量.本节中设置的环境变量优先于进程的系统环境变量.
此变量可以保存在 JSON 中。例如,内容如下的 envsettings.json
{
// Possible string values reported below. When empty, it uses the ENV variable value or
// Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": "Development"
}
Run Code Online (Sandbox Code Playgroud)
稍后修改您的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();
}
}
Run Code Online (Sandbox Code Playgroud)
这样它就会始终包含在发布中,您可以根据托管网站的环境更改为所需的值。
此方法也可用于控制台应用程序,因为更改位于文件Program.cs 中。
小智 6
使用最新版本的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
您可以直接将ASPNETCORE_ENVIRONMENT
env 添加到 web.config 文件中:
<configuration>
<system.webServer>
<aspNetCore processPath="dotnet" arguments=".\MyProject.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
76602 次 |
最近记录: |