Я использую этот же метод для установки имени eonvironment для веб-приложения, которое я публикую в папке. Однако при публикации приложения консоли ядра .net, использующего IWebhostBuilder, имя среды не обновляется?
У меня есть приложение консоли ядра .net, которое я публикую в папку, и приложение консоли используетIWebhostBuilder, поэтому мне нужно иметь возможность установить имя среды перед публикацией. Кажется, он хочет получить настройки по умолчанию для приложений, а не для моей целевой среды (Dev). У меня есть файл appsettings.Dev.json
Мой профиль публикации выглядит следующим образом
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Configuration>Dev</Configuration>
<Platform>Any CPU</Platform>
<TargetFramework>netcoreapp2.2</TargetFramework>
<PublishDir>\\dev-server1\d$\Services\BoxService</PublishDir>
<SelfContained>false</SelfContained>
<_IsPortable>true</_IsPortable>
<EnvironmentName>Dev</EnvironmentName>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
</Project>
[Редактировать] Ничего не получалось, поэтому я провел эксперимент, потому что, очевидно, я что-то упускаю или просто не понимаю. Я создал новое тестовое консольное приложение, в котором ничего не было, кроме одного класса с методом Main. Добавил необходимые пакеты (Extensions.Configuration и т. Д.), Затем приступил к публикации приложения в локальной папке со следующим в моем publishprofile.
<EnvironmentName>Local</EnvironmentName>
Это явно не используется, потому что, когда я запускаю его изVisual Studio сообщает, что была задана правильная среда, но при запуске из опубликованной папки она выглядит так, как будто среда не была установлена.
Here is Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.EnvironmentVariables;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
namespace Cmd1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var environmentName =
Environment.GetEnvironmentVariable("ENVIRONMENT");
// create service collection
var services = new ServiceCollection();
// build config
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false)
.AddJsonFile($"appsettings.{environmentName}.json", true)
.AddEnvironmentVariables()
.Build();
// setup config
services.AddOptions();
services.Configure<AppSettings>(configuration.GetSection("App"));
// create service provider
var serviceProvider = services.BuildServiceProvider();
var appSettings = serviceProvider.GetService<IOptions<AppSettings>>();
string env = Environment.GetEnvironmentVariable("Environment");
Console.WriteLine($" We are looking at {appSettings.Value.TempDirectory} from environment: {env}");
}
}
}
Appsettings.json
{
"App": {
"TempDirectory": "d:\temp"
}
}
Appsettings.Local.json
{
"App": {
"TempDirectory": "c:\\temp\\rss-hero\\tmp\\"
}
}
Настройка среды в VS
Результаты VS
Результаты при запуске из опубликованной папки