Visual studio Azure服务结构-不同环境的不同发布设置

Visual studio Azure服务结构-不同环境的不同发布设置,visual-studio,azure-service-fabric,Visual Studio,Azure Service Fabric,这似乎是一个简单的问题,但我仍然没有找到答案,尽管我花了很多时间阅读了互联网上的文档和相关文章。我有一个SF应用程序,其中包含几个服务,我希望能够(从Visual Studio)为不同的环境打包这些服务:dev、test、prod。这些环境需要不同的设置,例如应用程序运行时的用户、到数据库的连接字符串、,等等。我已经使用Start serviceffabricapplicationupgrade命令更改了特定集群上的环境变量,但这样我无法设置我需要的所有内容,而且我更希望在应用程序包中有我需要的

这似乎是一个简单的问题,但我仍然没有找到答案,尽管我花了很多时间阅读了互联网上的文档和相关文章。我有一个SF应用程序,其中包含几个服务,我希望能够(从Visual Studio)为不同的环境打包这些服务:dev、test、prod。这些环境需要不同的设置,例如应用程序运行时的用户、到数据库的连接字符串、,等等。我已经使用Start serviceffabricapplicationupgrade命令更改了特定集群上的环境变量,但这样我无法设置我需要的所有内容,而且我更希望在应用程序包中有我需要的所有配置。我该怎么办?在这种情况下,我使用Windows独立群集(在开发环境中除外,它是一个本地开发群集)。

服务级别 在您的ServiceManifest.xml中,位于
{YourService}\PackageRoot\serviceMifest.xml

您将有一个条目
CodePackage
将标签
EnvironmentVariables
添加到要使用空值的EnvironmentVariables下

<CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
        <!--...-->
    </EntryPoint>
    <EnvironmentVariables>
        <EnvironmentVariable Name="Connectionstring" Value=""/>
    </EnvironmentVariables>
</CodePackage>
应用程序级别 在
{YourApplication}\ApplicationPackageRoot\ApplicationManifest.xml下的
ApplicationManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
  <ClusterConnectionParameters ConnectionEndpoint="{YourEndpoint}" />
  <!--Reference the settings file-->
  <ApplicationParameterFile Path="..\ApplicationParameters\Test.xml" />
  <UpgradeDeployment Mode="UnmonitoredAuto" Enabled="true">
  
    <!--Specify additonal upgrade parameters here--> 
    <Parameters />
  </UpgradeDeployment>
</PublishProfile>
有一个章节
为您要在部署时设置的每个值添加一个参数

<Parameters>
    <Parameter Name="Connectionstring" DefaultValue="{your connectionstring}" />
</Parameters>
方括号中的值由
标记中定义的参数替换

特定于环境的配置 在
{YourApplication}\ApplicationParameters
文件夹下。为每个环境创建一个文件。示例
Test.xml
,并使用环境值指定参数

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/{YourApplication}" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Connectionstring" Value="{Your test connection string}" />
  </Parameters>
</Application>
完成此操作后,只需使用正确的发布配置文件部署应用程序。

服务级别 在您的ServiceManifest.xml中,位于
{YourService}\PackageRoot\serviceMifest.xml

您将有一个条目
CodePackage
将标签
EnvironmentVariables
添加到要使用空值的EnvironmentVariables下

<CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
        <!--...-->
    </EntryPoint>
    <EnvironmentVariables>
        <EnvironmentVariable Name="Connectionstring" Value=""/>
    </EnvironmentVariables>
</CodePackage>
应用程序级别 在
{YourApplication}\ApplicationPackageRoot\ApplicationManifest.xml下的
ApplicationManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
  <ClusterConnectionParameters ConnectionEndpoint="{YourEndpoint}" />
  <!--Reference the settings file-->
  <ApplicationParameterFile Path="..\ApplicationParameters\Test.xml" />
  <UpgradeDeployment Mode="UnmonitoredAuto" Enabled="true">
  
    <!--Specify additonal upgrade parameters here--> 
    <Parameters />
  </UpgradeDeployment>
</PublishProfile>
有一个章节
为您要在部署时设置的每个值添加一个参数

<Parameters>
    <Parameter Name="Connectionstring" DefaultValue="{your connectionstring}" />
</Parameters>
方括号中的值由
标记中定义的参数替换

特定于环境的配置 在
{YourApplication}\ApplicationParameters
文件夹下。为每个环境创建一个文件。示例
Test.xml
,并使用环境值指定参数

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/{YourApplication}" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Connectionstring" Value="{Your test connection string}" />
  </Parameters>
</Application>

完成此操作后,只需使用正确的发布配置文件部署应用程序。

谢谢您的详细回答。在必须更改其他设置(环境变量除外)的情况下,此方法是否也有效。类似于应用程序的RunAs用户,这在不同的环境中是不同的。或者在DEV上为web应用提供HTTP端口,在测试/产品环境中使用受证书保护的HTTPS?您可以使用来控制端口。还没有尝试过RunAs策略。但是我想相同的语法应该也能起作用。我想知道,在上述场景中,存在于每个服务中的PackageRoot\Config\Settings.xml文件是如何集成的?他们的目的是什么,它们还带来了什么其他好处?From::Config package是PackageRoot下配置目录的内容,其中包含一组可独立更新和版本化的自定义配置设置,供您的服务使用。有一个API可以访问配置文件:-主要好处是这些配置都经过版本化,并且在滚动升级之后服务结构中的策略。感谢您提供详细的答案。在必须更改其他设置(环境变量除外)的情况下,此方法是否也有效。类似于应用程序的RunAs用户,这在不同的环境中是不同的。或者在DEV上为web应用提供HTTP端口,在测试/产品环境中使用受证书保护的HTTPS?您可以使用来控制端口。还没有尝试过RunAs策略。但是我想相同的语法应该也能起作用。我想知道,在上述场景中,存在于每个服务中的PackageRoot\Config\Settings.xml文件是如何集成的?他们的目的是什么,它们还带来了什么其他好处?From::Config package是PackageRoot下配置目录的内容,其中包含一组可独立更新和版本化的自定义配置设置,供您的服务使用。有一个API可以访问配置文件:-主要好处是这些配置都经过版本化,并且在滚动升级之后服务结构中的策略。