{"id":17835867,"url":"https://github.com/guitarrapc/swaptasks","last_synced_at":"2026-04-26T23:31:59.130Z","repository":{"id":144153551,"uuid":"121985375","full_name":"guitarrapc/SwapTasks","owner":"guitarrapc","description":"MSBuild Task to provide SwapFile and clean up folder on publish.","archived":false,"fork":false,"pushed_at":"2020-06-09T20:13:10.000Z","size":29,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-01T22:18:51.866Z","etag":null,"topics":["dotnet","msbuild","visual-studio"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guitarrapc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-18T19:56:09.000Z","updated_at":"2018-11-22T01:16:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"0af9b2dd-cd7e-49bc-8536-6f16c560b3ee","html_url":"https://github.com/guitarrapc/SwapTasks","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitarrapc%2FSwapTasks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitarrapc%2FSwapTasks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitarrapc%2FSwapTasks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitarrapc%2FSwapTasks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guitarrapc","download_url":"https://codeload.github.com/guitarrapc/SwapTasks/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246819785,"owners_count":20839095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","msbuild","visual-studio"],"created_at":"2024-10-27T20:26:27.496Z","updated_at":"2026-04-26T23:31:59.101Z","avatar_url":"https://github.com/guitarrapc.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build status](https://ci.appveyor.com/api/projects/status/lvqx1aaipttqtcaq?svg=true)](https://ci.appveyor.com/project/guitarrapc/swaptasks)\n[![NuGet status](https://img.shields.io/nuget/v/SwapTasks.svg)](https://www.nuget.org/packages/SwapTasks)\n\n## SwapTasks\n\nMSBuild Custom Tasks for .NETCore\n\n## Install\n\nYou can install by [NuGet](https://www.nuget.org/packages/SwapTasks).\n\n```powershell\nPM\u003e Install-Package SwapTasks\n```\n\n## Supported Platform\n\n- .NETStandard 2.0\n- .NET Framework (FullClr)\n\n## Current Tasks\n\n### SwapFile\n\n#### Description\n\nSwap file with source and destination.\n\n#### Example\n\n```xml\n  \u003cTarget Name=\"SwapTask\" BeforeTargets=\"Build\"\u003e\n    \u003cSwapFile Trigger=\"$(Trigger)\" Fallback=\"Development\" Configuration=\"$(Configuration)\" FileName=\"app\" Extension=\"config\" SourceDir=\"$(MSBuildThisFileDirectory)\" DestinationDir=\"$(MSBuildThisFileDirectory)\" /\u003e\n  \u003c/Target\u003e\n```\n\n#### Equivalent\n\n```xml\n    \u003cTarget Name=\"SwapTask\"\u003e\n      \u003cPropertyGroup\u003e\n        \u003cCopyConfigMessage\u003eTrigger build parameter missing! Skipping $(SwapFileName).$(SwapExtension) swap task.\u003c/CopyConfigMessage\u003e\n        \u003cCopyConfigDestination\u003e$([System.IO.Path]::Combine($(SwapDestinationDir), $(SwapFileName).$(SwapExtension)))\u003c/CopyConfigDestination\u003e\n      \u003c/PropertyGroup\u003e\n      \u003cPropertyGroup Condition=\"'$(Trigger)' != '' AND Exists('$(MSBuildThisFileDirectory)$(SwapFileName).$(Trigger).$(SwapExtension)')\"\u003e\n        \u003c!-- For \"dotnet build|publish -c Debug /p:Trigger=Xxxx\" where xxx.Trigger.config exists --\u003e\n        \u003cCopyConfigMessage\u003eDetected Trigger parameter, Copy $(SwapFileName).$(Trigger).$(SwapExtension) to $(SwapFileName).$(SwapExtension)\u003c/CopyConfigMessage\u003e\n        \u003cCopyConfigSource\u003e$(MSBuildThisFileDirectory)$(SwapFileName).$(Trigger).$(SwapExtension)\u003c/CopyConfigSource\u003e\n      \u003c/PropertyGroup\u003e\n      \u003cPropertyGroup Condition=\"'$(Trigger)' != '' AND !Exists('$(MSBuildThisFileDirectory)$(SwapFileName).$(Trigger).$(SwapExtension)')\"\u003e\n        \u003c!-- For \"dotnet build|publish -c Debug /p:Trigger=Xxxx\" where xxx.Trigger.config NOT exists --\u003e\n        \u003cFallback\u003eDevelopment\u003c/Fallback\u003e\n        \u003cCopyConfigMessage\u003eDetected Trigger parameter, $(SwapFileName).$(Trigger).$(SwapExtension) missing! Copy $(SwapFileName).$(Fallback).$(SwapExtension) to $(SwapFileName).$(SwapExtension)\u003c/CopyConfigMessage\u003e\n        \u003cCopyConfigSource\u003e$(MSBuildThisFileDirectory)$(SwapFileName).$(Fallback).$(SwapExtension)\u003c/CopyConfigSource\u003e\n      \u003c/PropertyGroup\u003e\n      \u003cPropertyGroup Condition=\"'$(Trigger)' == '' AND Exists('$(MSBuildThisFileDirectory)$(SwapFileName).$(Configuration).$(SwapExtension)')\"\u003e\n        \u003c!-- For dotnet build|publish without /p:Trigger=Xxxx --\u003e\n        \u003cCopyConfigMessage\u003eMissing Trigger parameter! Copy $(SwapFileName).$(Configuration).$(SwapExtension) to $(SwapFileName).$(SwapExtension)\u003c/CopyConfigMessage\u003e\n        \u003cCopyConfigSource\u003e$(MSBuildThisFileDirectory)$(SwapFileName).$(Configuration).$(SwapExtension)\u003c/CopyConfigSource\u003e\n      \u003c/PropertyGroup\u003e\n      \u003cMessage Importance=\"High\" Text=\"@SwapConfig@ [$(SwapFileName).$(SwapExtension)] $(CopyConfigMessage)\" /\u003e\n      \u003cMessage Importance=\"High\" Text=\"* CopyConfigSource           : $(CopyConfigSource)\" /\u003e\n      \u003cMessage Importance=\"High\" Text=\"* CopyConfigDestination      : $(CopyConfigDestination)\" /\u003e\n      \u003cCopy SourceFiles=\"$(CopyConfigSource)\" DestinationFiles=\"$(CopyConfigDestination)\" /\u003e\n    \u003c/Target\u003e\n```\n\n### CleanPublishArtifact\n\nclean publish directory for `dotnet publish`.\n\n#### Example\n\n```xml\n  \u003cTarget Name=\"CleanPublish\" AfterTargets=\"Build\"\u003e\n    \u003cCleanPublishArtifact MSBuildThisFileDirectory=\"$(MSBuildThisFileDirectory)\" PublishDir=\"$(PublishDir)\"/\u003e\n  \u003c/Target\u003e\n```\n\n#### Equivalent\n\n```xml\n    \u003c!-- Clean PublishDir task --\u003e\n    \u003cTarget Name=\"CleanPublishArtifact\"\u003e\n      \u003cPropertyGroup\u003e\n        \u003cCleanMessage\u003eClean up publish path before new publish execute.\u003c/CleanMessage\u003e\n        \u003cCleanPath\u003e$([System.IO.Path]::Combine($(MSBuildThisFileDirectory),$(PublishDir)))\u003c/CleanPath\u003e\n      \u003c/PropertyGroup\u003e\n      \u003cMessage Importance=\"High\" Text=\"@CleanPublishArtifact@ $(CleanMessage)\" /\u003e\n      \u003cMessage Importance=\"High\" Text=\"CleanPath : $(CleanPath)\" /\u003e\n      \u003cRemoveDir Directories=\"$(CleanPath)\" /\u003e\n    \u003c/Target\u003e\n```\n\n## Related\n\n- \u003e [Shipping a cross-platform MSBuild task in a NuGet package - Nate McMaster](http://www.natemcmaster.com/blog/2017/07/05/msbuild-task-in-nuget/)\n- \u003e [natemcmaster/msbuild-tasks - Github](https://github.com/natemcmaster/msbuild-tasks)\n- \u003e [MSBuild custom task and assembly locks - mnaoumov.NET](https://mnaoumov.wordpress.com/2015/07/13/msbuild-custom-task-and-assembly-locks/)\n\n## LICENSE\n\nThe MIT License (MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguitarrapc%2Fswaptasks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguitarrapc%2Fswaptasks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguitarrapc%2Fswaptasks/lists"}