MSBuild Custom Tasks for .NETCore
You can install by NuGet.
PM> Install-Package SwapTasks
- .NETStandard 2.0
- .NET Framework (FullClr)
Swap file with source and destination.
<Target Name="SwapTask" BeforeTargets="Build">
<SwapFile Trigger="$(Trigger)" Fallback="Development" Configuration="$(Configuration)" FileName="app" Extension="config" SourceDir="$(MSBuildThisFileDirectory)" DestinationDir="$(MSBuildThisFileDirectory)" />
</Target>
<Target Name="SwapTask">
<PropertyGroup>
<CopyConfigMessage>Trigger build parameter missing! Skipping $(SwapFileName).$(SwapExtension) swap task.</CopyConfigMessage>
<CopyConfigDestination>$([System.IO.Path]::Combine($(SwapDestinationDir), $(SwapFileName).$(SwapExtension)))</CopyConfigDestination>
</PropertyGroup>
<PropertyGroup Condition="'$(Trigger)' != '' AND Exists('$(MSBuildThisFileDirectory)$(SwapFileName).$(Trigger).$(SwapExtension)')">
<!-- For "dotnet build|publish -c Debug /p:Trigger=Xxxx" where xxx.Trigger.config exists -->
<CopyConfigMessage>Detected Trigger parameter, Copy $(SwapFileName).$(Trigger).$(SwapExtension) to $(SwapFileName).$(SwapExtension)</CopyConfigMessage>
<CopyConfigSource>$(MSBuildThisFileDirectory)$(SwapFileName).$(Trigger).$(SwapExtension)</CopyConfigSource>
</PropertyGroup>
<PropertyGroup Condition="'$(Trigger)' != '' AND !Exists('$(MSBuildThisFileDirectory)$(SwapFileName).$(Trigger).$(SwapExtension)')">
<!-- For "dotnet build|publish -c Debug /p:Trigger=Xxxx" where xxx.Trigger.config NOT exists -->
<Fallback>Development</Fallback>
<CopyConfigMessage>Detected Trigger parameter, $(SwapFileName).$(Trigger).$(SwapExtension) missing! Copy $(SwapFileName).$(Fallback).$(SwapExtension) to $(SwapFileName).$(SwapExtension)</CopyConfigMessage>
<CopyConfigSource>$(MSBuildThisFileDirectory)$(SwapFileName).$(Fallback).$(SwapExtension)</CopyConfigSource>
</PropertyGroup>
<PropertyGroup Condition="'$(Trigger)' == '' AND Exists('$(MSBuildThisFileDirectory)$(SwapFileName).$(Configuration).$(SwapExtension)')">
<!-- For dotnet build|publish without /p:Trigger=Xxxx -->
<CopyConfigMessage>Missing Trigger parameter! Copy $(SwapFileName).$(Configuration).$(SwapExtension) to $(SwapFileName).$(SwapExtension)</CopyConfigMessage>
<CopyConfigSource>$(MSBuildThisFileDirectory)$(SwapFileName).$(Configuration).$(SwapExtension)</CopyConfigSource>
</PropertyGroup>
<Message Importance="High" Text="@SwapConfig@ [$(SwapFileName).$(SwapExtension)] $(CopyConfigMessage)" />
<Message Importance="High" Text="* CopyConfigSource : $(CopyConfigSource)" />
<Message Importance="High" Text="* CopyConfigDestination : $(CopyConfigDestination)" />
<Copy SourceFiles="$(CopyConfigSource)" DestinationFiles="$(CopyConfigDestination)" />
</Target>
clean publish directory for dotnet publish
.
<Target Name="CleanPublish" AfterTargets="Build">
<CleanPublishArtifact MSBuildThisFileDirectory="$(MSBuildThisFileDirectory)" PublishDir="$(PublishDir)"/>
</Target>
<!-- Clean PublishDir task -->
<Target Name="CleanPublishArtifact">
<PropertyGroup>
<CleanMessage>Clean up publish path before new publish execute.</CleanMessage>
<CleanPath>$([System.IO.Path]::Combine($(MSBuildThisFileDirectory),$(PublishDir)))</CleanPath>
</PropertyGroup>
<Message Importance="High" Text="@CleanPublishArtifact@ $(CleanMessage)" />
<Message Importance="High" Text="CleanPath : $(CleanPath)" />
<RemoveDir Directories="$(CleanPath)" />
</Target>
The MIT License (MIT)