2016-12-22 6 views
1

当社は、Service Fabricを使用して新しいアプリケーションを開発しています。 複数の開発者がキュー、データベース、リモートサーバー上のストレージを使用し、それぞれが異なる構成を持ち、すべての設定が環境ごとのApplicationParametersファイルに格納されます。ローカル開発には単一のLocalがあります。 5Node.xml。非常に一般的な開発者は、これらのファイルの最新バージョンを取得すると、資格情報をチェックインし、他のものを上書きします。サービスファブリックのデフォルトLocalic以外のプロファイルを公開

私はServiceFabricデプロイメントスクリプト 'Deploy-FabricApplication.ps1'をカスタマイズして、ログインしたユーザーのWindows資格情報に応じてカスタムのPublishProfileを使用しようとしています。私は展開ファイルを更新することができます。公開を使用して展開するとうまくいきますが、F5(デバッグ)を押したときのServiceFabricのデフォルトの動作は、Local.5Node.xmlアプリケーションパラメータで上書きされているようです。

すべてのサービスファブリック.ps1ファイルを調べて、これが定義されている場所を見つけることができませんでした。私はこれが.targetsファイルで定義されていると思うので、どうすればこのデフォルトの動作を避けることができるのか分かりません。

Local.5Node.xml以外のローカル開発マシンでカスタムPublishProfilesを使用する方法はありますか?

+0

開発用のデフォルトの認証情報を作成することを検討しましたか?誰もが開発段階で同じ資格情報を共有する必要があり、このミスの問題を回避できます。 – Fals

+0

なぜApp.configファイルではなくApplicationParametersファイルに設定を保存しますか?もう1つは、変換を伴ういくつかの開発者にとって、簡単に構成可能です。 – cassandrad

+0

すべての開発者に単一の設定を使用する方法はありません。非常に一般的な例として、私たちのシステムはメッセージをキューに入れ、他のサービスはメッセージを受け取っています。複数の開発者がアプリケーションを実行している場合、所有者の開発者はこれらのメッセージを受け取ることはありません。 Wheは、私たちのサービスが純粋にサービスファブリックベースであるため、ApplicationParametersとAppConfigsの間で設定を分割したくないので、ApplicationParametersを使用しています。 –

答えて

5

私は実際には、チーム固有の環境をいくつか設定してこれに遭遇しました。私は別のチームのために必要だったものに基づいて複数のパラメータファイルを追加

:私は、次のソースからの情報を借りました。それぞれに固有のリソース設定が含まれています。

Visual Studio Setup

私もLocal.1Node.Template.xmlとLocal.5Node.Template.xmlを追加しました。私は、Local.1Node.xmlとLocal.5Node.xmlをソースコントロールから削除して、Visual Studioが本当に欠けているとは思わないように、それらをプロジェクトに残しながら無視するように設定しました。次のように1Nodeの内容は、(5Nodeが5Nodeで1Nodeを置き換える以外は同じである)は次のとおりです。

:私は、次のMSBuildタスクとターゲットを格納するためのサービスファブリックプロジェクトのsfprojファイルを編集し

<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キーを押してデバッグするだけで、作業中のクラスタの正しい構成でローカルでデバッグできます。

+0

良いアプローチ、共有ありがとう。私は開発者ごとに個別のパラメータを設定し、パブリッシュプロファイルの手動更新を行います。次の変更は同じアプローチを適用しようとします。ありがとう。 –

3

Visual Studioを使用してソリューションをデバッグするときにハードコードされた公開プロファイルを定義するサービスファブリックのVS拡張機能では、クラスタのノード数を確認し、Local.5Node.xmlおよびLocal.1Node.xmlへのリンクを作成します私のクラスターが持つノードの数。

同じ結果を達成するために、開発者ごとにカスタムアプリケーションパラメータを使用し、各開発者はそれぞれのアプリケーションパラメータファイルを指すように公開プロファイル(Local.5node.xml)を更新します。

これは必須機能として自動化されていませんが、主な問題を解決することができます。

関連する問題