2017-05-29 3 views
1

私のアプリはいくつかの設定でappsettings.jsonを使用しています。 appsettings.local.jsonが存在する場合は、appsettings.jsonに含まれる設定を上書きする必要があります。これまでのところ問題ありません。オプション(新しいフォーマット)のビジュアルスタジオプロジェクトのappsettings.local.json

しかし私はバージョン管理のためにgitを使用します。明らかに、私は他のユーザーが自分のローカル設定をプルダウンすることを望んでいません。だから私はappsettings.jsonを無視してgit。

さらに、ソリューションには多くのプロジェクトがあります。それらは同じ設定を共有します。だから、ソリューションレベルにはappsettings.jsonがあり、すべてのプロジェクトにはリンクとしてそれが含まれています。

1つのことを除いて、まだうまくありません。使用できるようにするには、出力ディレクトリにappsettings.local.jsonをコピーする必要があります。しかし、それはバージョン管理にあるべきではありません。だから誰かが解決策を新鮮にクローン化しても、それは得られません。それはうまくいくはずですが、そうではありません。 VS。 「このファイルはリンクされるべきだが、どこにあるの?」ビルドエラー。

どうすれば対応できますか?

+0

dest.jsonなぜあなたは 'appsettings.local.json'のみを無視Gitのではないのですか? –

+0

ファイルはすべての人に存在する必要があります。私はちょうど変更をプッシュしたくない。 –

答えて

1

計画:appsettings.local-base.json

  1. 置きデフォルトのローカル値。
  2. appsettings.local.jsonから.gitignoreを追加します。存在しない appsettings.local.json場合
  3. は、出力フォルダにappsettings.local.jsonとしてappsettings.local-base.jsonをコピーします。
  4. ユーザーがプロジェクトフォルダに自分のappsettings.local.jsonを持っている場合は何もしません(VSで出力フォルダにコピーされます)。

MSBuild Copyターゲットはビルドの前後に条件付きでファイルをコピーできます。プロジェクトは、次のメッセージが出力を構築VSに表示されます構築した後

<Project Sdk="Microsoft.NET.Sdk.Web"> 

    <PropertyGroup> 
    <TargetFramework>netcoreapp1.1</TargetFramework> 
    </PropertyGroup> 

    <!--rest of file --> 

    <Target Name="TestTarget" AfterTargets="Build"> 
     <ItemGroup> 
      <FromFile Include="src.json" /> 
      <ToFile Include="$(OutDir)dest.json" /> 
     </ItemGroup> 

     <Message Text="Copying @(FromFile) file to: @(ToFile)" Importance="high" /> 

     <Copy 
      SourceFiles="@(FromFile)" 
      DestinationFiles="@(ToFile)" 
      Condition="!Exists('@(ToFile)')" 
      OverwriteReadOnlyFiles="true" 
      SkipUnchangedFiles="false" /> 
    </Target> 
</Project> 

:以下のターゲットは、Visual Studio 2017とcsprojベースの.NETのコアプロジェクト(ファイル名が減少している)ため、実際のです

コピーsrc.jsonファイルにします。bin \デバッグ\ netcoreapp1.1 \

関連する問題