我遇到了同样的问题,并且能够创建一个适合我的解决方案。
如果您查看您的 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>
接下来,您将要查看实际 Service Fabric 项目 中的 ApplicationPackageRoot/ApplicationManifest.xml 文件(这不是 ASP.NET Core项目)。需要更改两个文件。
-
在文件顶部的<Parameters> 标记内添加 ASPNETCORE_ENVIRONMENT 参数,如下所示:
<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 模式来简化部署。我希望这会有所帮助!