实际上,我刚刚在设置一些团队特定环境时遇到了这个问题。我从以下来源借用了信息:
- Web 配置转换
- 用 MSBUILD 替换文件中的字符串
我根据不同团队的需要添加了多个参数文件。每一项都包含其特定的资源设置。
我还添加了 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>
然后,我编辑了 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 Fabric 主机项目中的调试配置创建了 FT1-Debug 到 FT6-Debug。我放弃了所有其他项目。
此时,不同团队中的每个人都可以使用他们正在工作的集群的正确配置进行本地调试,只需更改构建配置并按 F5 进行调试即可。