MSBuildを使用してappSettings.json変換を実行するタスクの作成方法
カスタムタスクReplaceFileText
をプロジェクトファイルに追加できます。
これを行うには、プロジェクトをアンロードします。そして、プロジェクトの最後に、ちょうど終了タグ</Project>
前に、スクリプト以下の場所:
<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="TransformsWithProduction" Condition="'$(Configuration)'=='Production'" AfterTargets="Build">
<ReplaceFileText
InputFilename="$(ProjectDir)appsettings.json"
OutputFilename="$(ProjectDir)appsettings.json"
MatchExpression="MyDb"
ReplacementText="MyDbProduction" />
</Target>
<Target Name="TransformsWithProduction" Condition="'$(Configuration)'=='staging'" AfterTargets="Build">
<ReplaceFileText
InputFilename="$(ProjectDir)appsettings.json"
OutputFilename="$(ProjectDir)appsettings.json"
MatchExpression="MyDb"
ReplacementText="MyDbstaging" />
</Target>
上記の例では、ファイルappSettings.json
に「MyDbstaging
」または「MyDbProduction
」と「MyDb
」を置き換えます。ほかに
、手動で各修正後appSettings.json
ファイル内の値に「MyDb
」を復元することなく、このタスクを再利用できるようにするために、我々は、この値を復元するために別のタスク追加することができます。
を
<Target Name="RestoreJsonFile" BeforeTargets="Build">
<Copy
SourceFiles="$(ProjectDir)\BackupJsonFile\appsettings.json"
DestinationFolder="$(ProjectDir)"
/>
</Target>
バックアップフォルダBackupJsonFile
にappSettings.json
をバックアップしてから、コピーして修正済みのファイルを置き換えます。
だから、最終的なカスタムタスクは次のようになります。
<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="RestoreJsonFile" BeforeTargets="Build">
<Copy
SourceFiles="$(ProjectDir)\BackupJsonFile\appsettings.json"
DestinationFolder="$(ProjectDir)"
/>
</Target>
<Target Name="TransformsWithProduction" Condition="'$(Configuration)'=='Production'" AfterTargets="RestoreJsonFile">
<ReplaceFileText
InputFilename="$(ProjectDir)appsettings.json"
OutputFilename="$(ProjectDir)appsettings.json"
MatchExpression="MyDb"
ReplacementText="MyDbProduction" />
</Target>
<Target Name="TransformsWithstaging" Condition="'$(Configuration)'=='staging'" AfterTargets="RestoreJsonFile">
<ReplaceFileText
InputFilename="$(ProjectDir)appsettings.json"
OutputFilename="$(ProjectDir)appsettings.json"
MatchExpression="MyDb"
ReplacementText="MyDbstaging" />
</Target>
ところで、ビルドがある場合は、あなたの唯一のオプションは、あなたがappSettings.production.json
を使用しようとすることができていないappSettings.json
にMYDBの値を交換する場合appSettings.json
の値を置き換えるのではなく、Productionのために実行します。詳細情報はConfig transformations in ASP.NET CoreとAppsettings.json configuration in ASP.Net Core Web APIを参照してください。
これが役に立ちます。
上記の手順を実行した後、私はアクティブなソリューション構成を「プロダクション」に変更してプロジェクトを構築し、appSettings.jsonファイルに変更は見られませんでした。 –
@Dev_Net、それは私のせいです。 'TransformsWithProduction'でターゲット名を二重にコピーしました。これを更新して確認でき、私の側でテストしました。うまくいきます。 –
ありがとうレオ、何の問題もなく働いた。いくつかのことがあります:1)appSettings.json内の 'connectionStrings'というセクション全体を、appSettings.Production.jsonまたはappSettings.Staging.jsonの同じセクションに置き換えるにはどうすればよいですか? 2)これは、コードを公開しなければならないときにのみ、これらのビルドタスクを実行することが可能であり、各ビルドではできません。 –