Service Fabric默认发布除Local.xml之外的配置文件

Die*_*des 3 azure azure-service-fabric

我们公司正在使用Service Fabric开发新的应用程序.我们遇到的一个常见问题是,多个开发人员使用队列,数据库,远程服务器上的存储,每个都有不同的配置,所有设置都存储在每个环境的ApplicationParameters文件中,对于本地开发,只有一个Local.5Node .XML.当我们获得这些文件的最新版本时,很常见的开发人员检查他们的凭据并覆盖其他人.

我正在尝试自定义ServiceFabric部署脚本'Deploy-FabricApplication.ps1'以使用自定义PublishProfile,具体取决于已登录用户的Windows凭据.我可以实现更新部署文件,当我们使用发布进行部署时,它可以正常工作,但是当我们点击F5(debug)时,ServiceFabric的默认行为似乎是用特定的Local.5Node.xml应用程序参数覆盖参数.

我探索了所有服务结构.ps1文件,但找不到这个定义的位置.我想这是在.targets文件上定义的,所以我不知道如何避免这种默认行为.

是否有任何其他方法在Local.5Node.xml以外的本地开发机器上使用自定义PublishProfiles?

Ada*_*itt 9

我实际上只是设置了一些特定于团队的环境.我借用了以下来源的信息:

我根据不同团队需要添加了多个参数文件.每个包含其特定的资源设置.

Visual Studio安装程序

我还添加了Local.1Node.Template.xml和Local.5Node.Template.xml.我甚至从源代码控制中删除了Local.1Node.xml和Local.5Node.xml,并将它们设置为忽略,同时将它们保留在项目中,以便Visual Studio不会认为它们确实丢失了.1Node的内容(除了用5Node替换1Node之外,5Node是相同的)如下:

<?xml version="1.0" encoding="utf-8"?>
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
    <ClusterConnectionParameters />
    <ApplicationParameterFile Path="..\ApplicationParameters\Local.1Node.$(Configuration).xml" />
</PublishProfile>
Run Code Online (Sandbox Code Playgroud)

然后,我编辑了Service Fabric项目的sfproj文件,以包含以下MSBuild任务和目标:

<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <InputFilename ParameterType="System.String" Required="true" />
        <OutputFilename ParameterType="System.String" Required="true" />
        <MatchExpression ParameterType="System.String" Required="true" />
        <ReplacementText ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Reference Include="System.Core" />
        <Using Namespace="System" />
        <Using Namespace="System.IO" />
        <Using Namespace="System.Text.RegularExpressions" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
                File.WriteAllText(
                    OutputFilename,
                    Regex.Replace(File.ReadAllText(InputFilename), MatchExpression, ReplacementText)
                );
            ]]>
        </Code>
    </Task>
</UsingTask>
<Target Name="UpdateProfile" BeforeTargets="UpdateServiceFabricApplicationManifest">
    <ReplaceFileText InputFilename="PublishProfiles\Local.1Node.Template.xml" OutputFilename="PublishProfiles\Local.1Node.xml" MatchExpression="\$\(Configuration\)" ReplacementText="$(Configuration)" />
    <ReplaceFileText InputFilename="PublishProfiles\Local.5Node.Template.xml" OutputFilename="PublishProfiles\Local.5Node.xml" MatchExpression="\$\(Configuration\)" ReplacementText="$(Configuration)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

最后一步是为团队设置不同的构建配置.我基于Service Fabric Service项目和Service Fabric Host项目中的Debug配置,通过FT6-Debug创建了FT1-Debug.我独自完成了所有其他项目.

此时,不同团队中的每个人都可以通过更改"构建配置"并按F5进行调试,在本地调试正确配置的群集.


Die*_*des 5

当我们使用Visual Studio调试解决方案时,Service Fabric的VS扩展定义了硬编码的发布配置文件,它检查我的集群有多少个节点,并创建一个指向Local.5Node.xml和Local.1Node.xml的链接,具体取决于我的节点数量.集群有.

为了实现相同的结果,我们最终为每个开发人员使用自定义应用程序参数,每个开发人员更新发布配置文件(Local.5node.xml)以指向其各自的Application参数文件.

它不是自动化的必需功能,但可以解决主要问题.