2016-12-22 2 views
1

Наша компания разрабатывает наши новые приложения, используя Service Fabric. Общая проблема, с которой мы сталкиваемся, несколько разработчиков используют очереди, базы данных, хранилища, которые находятся на удаленных серверах, и для каждой из них есть другая конфигурация, все настройки хранятся в файле ApplicationParameters для каждой среды, для локального развития есть один локальный. 5Node.xml. Очень часто разработчики проверяют свои учетные данные и перезаписывают другие, когда мы получаем последнюю версию этих файлов.Service Fabric Default Опубликовать профиль, отличный от Local.xml

Я пытаюсь настроить сценарий развертывания ServiceFabric «Deploy-FabricApplication.ps1» для использования настраиваемого файла PublishProfile в зависимости от учетных данных Windows зарегистрированного пользователя. Я могу добиться обновления файла развертывания, он хорошо работает при развертывании с использованием публикации, но кажется, что поведение по умолчанию ServiceFabric при нажатии F5 (debug) переписывает параметры с помощью определенных параметров приложения Local.5Node.xml.

Я изучил все файлы .ts1 для служебной ткани и не смог найти, где это определено. Я предполагаю, что это определено в файле .targets, поэтому я не знаю, как я могу избежать этого поведения по умолчанию.

Есть ли другой подход к использованию пользовательских PublishProfiles на локальных машинах разработки, отличных от Local.5Node.xml?

+0

Считаете ли вы создание учетных данных по умолчанию для разработки? Затем все должны иметь одинаковые учетные данные для этапа разработки, и вы можете избежать этой проблемы с конфигурацией пропусков. – Fals

+0

Почему вы сохраняете настройки в файле ApplicationParameters, а не в app.config? Второй вариант легко настраивается для нескольких разработчиков с преобразованиями, между прочим. – cassandrad

+0

Невозможно использовать одну конфигурацию для всех разработчиков, очень распространенным примером, который я могу дать, является то, что наша система помещает сообщения в очередь и другие сообщения об обслуживании, если несколько разработчиков запускают приложение, они будут пикап-сообщение от других, и разработчик-владелец не получит эти сообщения. Whe используют ApplicationParameters, потому что наш сервис исключительно основан на Service Fabric, он работает очень хорошо, мы не хотим разделить конфигурации между ApplicationParamenters и AppConfigs. –

ответ

5

Я на самом деле просто столкнулся с этим, создав среду для определенных команд. Я позаимствовал информацию из следующих источников:

Я добавил несколько параметров файлов на основе того, что было необходимо для различных команд. Каждый из них содержит свои конкретные настройки ресурсов.

Visual Studio Setup

Я также добавил Local.1Node.Template.xml и Local.5Node.Template.xml. Я даже удалил Local.1Node.xml и Local.5Node.xml из исходного элемента управления и установил их для игнорирования, оставив их в проектах, чтобы Visual Studio не думала, что они действительно отсутствуют. Содержание 1Node (5Node одинакова для замены 1Node с 5Node исключением), является следующим:

Затем я редактировал файл sfproj для проекта Service Fabric, чтобы содержать следующую MSBuild задачи и Target:

<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> 

Последним шагом было установить различные конфигурации сборки для команд. Я создал FT1-Debug через FT6-Debug на основе конфигурации Debug в проекте Service Fabric Service и в проекте Host Fabric. Я оставил все свои другие проекты в одиночку.

В этот момент каждый из разных команд может отлаживать локально с правильной конфигурацией для кластера, в котором они работают, просто изменив конфигурацию сборки и нажав F5 для отладки.

+0

Хороший подход, спасибо за обмен. В конечном итоге я настраиваю индивидуальные параметры для каждого разработчика и обновляю их вручную. Следующее изменение я попробую применить тот же подход. Благодарю. –

3

Расширение VS для Service Fabric определяет жесткий текст публикации, когда мы отлаживаем решение с помощью Visual Studio, проверяем количество узлов моего кластера и создаем ссылку на Local.5Node.xml и Local.1Node.xml в зависимости от сколько узлов у моего кластера.

Для достижения тех же результатов мы в конечном итоге используем пользовательские параметры приложения для каждого разработчика и каждое обновление для разработчиков публикуем профиль (Local.5node.xml), чтобы указать на их соответствующие файлы параметров приложения.

Он не является автоматизированным в качестве требуемой функции, но может решить основную проблему.

Смежные вопросы