我们公司正在使用Service Fabric开发新的应用程序。 我们遇到的一个常见问题是,多个开发人员使用队列,数据库,远程服务器上的存储,每个都有不同的配置,所有设置都存储在每个环境的ApplicationParameters文件中,对于本地开发,只有一个Local.5Node .XML。当我们获得这些文件的最新版本时,很常见的开发人员检查他们的凭据并覆盖其他人。
我尝试自定义ServiceFabric部署脚本' Deploy-FabricApplication.ps1'根据已登录用户的Windows凭据使用自定义PublishProfile。我可以实现更新部署文件,当我们使用发布进行部署时,它可以正常工作,但是当我们点击F5(debug)时,ServiceFabric的默认行为似乎是用特定的Local.5Node.xml应用程序参数覆盖参数。
我探索了所有服务结构.ps1文件,无法找到定义的位置。我想这是在.targets文件中定义的,所以我不知道如何避免这种默认行为。
在Local.5Node.xml以外的本地开发机器上是否还有其他方法可以使用自定义PublishProfiles?
答案 0 :(得分:8)
我实际上只是设置了一些特定于团队的环境。我从以下来源借用了信息:
我根据不同团队需要添加了多个参数文件。每个包含其特定的资源设置。
我还添加了Local.1Node.Template.xml和Local.5Node.Template.xml。我甚至从源代码控制中删除了Local.1Node.xml和Local.5Node.xml,并将它们设置为忽略,同时将它们保留在项目中,以便Visual Studio不会认为它们确实丢失了。 1Node的内容(5Node是相同的,除了用5Node替换1Node)如下:
<?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>
然后,我编辑了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>
最后一步是为团队设置不同的构建配置。我基于Service Fabric Service项目和Service Fabric Host项目中的Debug配置,通过FT6-Debug创建了FT1-Debug。我独自完成了所有其他项目。
此时,不同团队中的每个人都可以通过更改“构建配置”并按F5进行调试,在本地使用正在进行的群集的正确配置进行调试。
答案 1 :(得分:5)
Service Fabric的VS扩展在我们使用Visual Studio调试解决方案时定义了硬编码的发布配置文件,它检查我的集群有多少个节点,并创建一个到Local.5Node.xml和Local.1Node.xml的链接,具体取决于我的集群有很多节点。
为了实现相同的结果,我们最终为每个开发人员使用自定义应用程序参数,并且每个开发人员更新发布配置文件(Local.5node.xml)以指向其各自的应用程序参数文件。
它不是自动化的必需功能,但可以解决主要问题。