您是否尝试过以下命令:New-ServiceFabricApplication?
当您创建应用程序清单文件时,参数将包含您在注册新应用程序时设置的可替换参数。
这样的 ApplicationManifest.xml 示例:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="MyAppTypeName" ApplicationTypeVersion="1.0.0" xmlns=...>
<Parameters>
<Parameter Name="Web1_InstanceCount" Value="-1" />
<Parameter Name="ENVIRONMENT_NAME" Value="DEV" />
<Parameter Name="FEPlacementConstraints" Value="NodeTypeName==FrontEnd" />
</Parameters>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<EnvironmentOverrides />
</ServiceManifestImport>
<DefaultServices>
<Service Name="Web1">
<StatelessService ServiceTypeName="MyServiceType" InstanceCount="[Web1_InstanceCount]">
<SingletonPartition />
<PlacementConstraints>[FEPlacementConstraints]</PlacementConstraints>
</StatelessService>
</Service>
</DefaultServices>
</ApplicationManifest>
您可以使用这样的配置覆盖来更改设置文件:
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="MyConfigSection">
<Parameter Name="MySetting" Value="[ENVIRONMENT_NAME]"/>
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
或者你可以像这样在你的服务上设置环境变量:
<EnvironmentOverrides CodePackageRef="Code">
<EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="[ENVIRONMENT_NAME]" />
</EnvironmentOverrides>
在我看来,环境覆盖会更适合您的情况,
因为大多数来宾可执行文件在如何配置它们方面并不灵活,但通常它们接受环境变量。
那么你:
。
New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-dev -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='DEV'}
New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-uat -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='UAT'}
这种方法的唯一缺点是您最终会得到两个应用程序,但不要认为这对您来说是个问题,它们的管理方式与您对单个应用程序的管理方式基本相同。
如果您严格需要在同一个应用程序上同时运行两者,您可以采取一些解决方法:
在您的 ServiceManifest.xml 中:
<CodePackage Name="Code" Version="1.0.0">
<EntryPoint>
<ExeHost>
<Program>start.bat</Program>
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>
</CodePackage>
在您的 .exe 的同一文件夹(代码)上,创建包含以下内容的 start.bat 文件:
myApp.exe %EnvironmentVariableNameSetBySF%