Я столкнулся с тем же вопросом и смог создать решение, которое сработало для меня.
Если вы посмотрите на проект ASP.NET Core, вы должны увидеть файл Program.cs. В нижней части этого вы должны увидеть следующую реализацию интерфейса:
Task<string> ICommunicationListener.OpenAsync(CancellationToken cancellationToken)
{
...
}
Вы собираетесь первым хотите, чтобы изменить его на что-то вроде следующего:
Task<string> ICommunicationListener.OpenAsync(CancellationToken cancellationToken)
{
var context = FabricRuntime.GetActivationContext();
var endpoint = context.GetEndpoint(_endpointName);
var config = context.GetConfigurationPackageObject("Config");
var environment = config.Settings.Sections["Environment"].Parameters["ASPNETCORE_ENVIRONMENT"].Value;
var serverUrl = $"{endpoint.Protocol}://{FabricRuntime.GetNodeContext().IPAddressOrFQDN}:{endpoint.Port}";
_webHost = new WebHostBuilder().UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseEnvironment(environment)
.UseUrls(serverUrl)
.Build();
_webHost.Start();
return Task.FromResult(serverUrl);
}
Ключевой участок представляет собой .UseEnvironment(environment)
вызов , наряду с поддержкой поиска среды из конфигурации. Это даст ASP.NET Core необходимую информацию, необходимую для выбора среды.
Сделав это, вам, очевидно, необходимо добавить параметр ASPNETCORE_ENVIRONMENT в раздел конфигурации. Это выглядит так:
В вашем проекте ASP.NET Core вы найдете каталог с именем PackageRoot/Config. Внутри этого файла должен быть файл Settings.xml. Добавьте следующий код внутри тега <Settings>
...
<Section Name="Environment">
<Parameter Name="ASPNETCORE_ENVIRONMENT" Value="" />
</Section>
Далее, вы собираетесь хотите посмотреть на ApplicationPackageRoot/ApplicationManifest.xml файла внутри фактической службы проекта Fabric (это НЕ проект ASP.NET Core). Требуется два изменения файла.
Добавьте параметр ASPNETCORE_ENVIRONMENT внутри <Parameters>
тега в верхней части файла, например, так:
<Parameter Name="ASPNETCORE_ENVIRONMENT" DefaultValue="" />
Измените <ServiceManifestImport>
тег, чтобы включить <ConfigOverrides>
раздел, как так:
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="Environment">
<Parameter Name="ASPNETCORE_ENVIRONMENT" Value="[ASPNETCORE_ENVIRONMENT]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
Наконец, внесите изменения ApplicationParameters/Local.1Node.XML и друзей, чтобы содержать ASPNETCORE_ENVIRONMENT
параметр:
<Parameter Name="ASPNETCORE_ENVIRONMENT" Value="Development" />
Это много шагов, чтобы добавить долбанные переменную, которую можно восстановить, но это позволит вам большую гибкость и следует по стандартной схеме Service Fabric, чтобы сделать простое развертывание. Надеюсь, это поможет!
Что вы сделали с вашим приложением Service Fabric для настройки переменной окружения? Вы делаете «SetupEntryPoint», как описано здесь? https://azure.microsoft.com/en-us/documentation/articles/service-fabric-application-model/ –
Я использую Шаблон Service Fabric, предоставленный в Visual Studio. Он правильно имеет служебную запись xml, предварительно сконфигурированную в ServiceManifest. Я указывал переменную окружения в параметрах запуска –