{"id":17914342,"url":"https://github.com/enisn/abpdevtools","last_synced_at":"2026-04-20T13:11:09.145Z","repository":{"id":185634945,"uuid":"629903533","full_name":"enisn/AbpDevTools","owner":"enisn","description":"A set of tools to make development with ABP easier.","archived":false,"fork":false,"pushed_at":"2025-01-22T07:14:38.000Z","size":2673,"stargazers_count":48,"open_issues_count":3,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-19T00:24:06.077Z","etag":null,"topics":["abp","abp-framework","cli","dotnet"],"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/enisn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2023-04-19T09:01:14.000Z","updated_at":"2025-02-16T16:38:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"a4891d1e-e55d-4a44-8997-a6c69ea29084","html_url":"https://github.com/enisn/AbpDevTools","commit_stats":null,"previous_names":["enisn/abpdevtools"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enisn%2FAbpDevTools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enisn%2FAbpDevTools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enisn%2FAbpDevTools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enisn%2FAbpDevTools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enisn","download_url":"https://codeload.github.com/enisn/AbpDevTools/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245186440,"owners_count":20574551,"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":["abp","abp-framework","cli","dotnet"],"created_at":"2024-10-28T19:57:46.098Z","updated_at":"2026-04-20T13:11:09.139Z","avatar_url":"https://github.com/enisn.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"art/logo.svg\" height=\"256\" /\u003e\n\u003c/p\u003e\n\n# AbpDevTools\nA set of tools to make development with ABP easier. It's a dotnet tool and accessed via `abpdev` **CLI** command.\n\nIt helps the developer, build, run, replace, and manage logs of the projects. It makes running **multiple** solutions and projects easier.\n\n\u003e Done with [Enisn.Templates.CLI](https://github.com/enisn/Enisn.Templates.CLI). You can build similar CLI tools with this template.\n\n\u003ca href=\"https://www.nuget.org/packages/AbpDevTools\"\u003e\u003cimg src=\"https://img.shields.io/nuget/v/AbpDevTools?logo=nuget\" alt=\"AbpDevTools on Nuget\" /\u003e\u003c/a\u003e\n\n\u003ca href=\"https://enisn.github.io/AbpDevTools/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Documentation-available-blue\" alt=\"Documentation\" /\u003e\u003c/a\u003e\n\n# Installation\n\n- Install [AbpDevTools from NuGet](https://www.nuget.org/packages/AbpDevTools) as dotnet tool:\n```bash\ndotnet tool update -g AbpDevTools\n```\n\n- Installation for a specific runtime other than the latest:\n    \n    ```bash\n    dotnet tool update -g AbpDevTools --framework net8.0\n    # or\n    dotnet tool update -g AbpDevTools --framework net6.0\n    ```\n\n\u003e This package is compiled for .NET 6.0, 7.0, 8.0 and 9.0. So you can install it for a specific runtime. If you don't specify a runtime, it'll install the latest version.\n\n## Local Installation\nIf you don't have access to the package source. You can install it from the source code by the following code:\n\n```bash\npwsh install.ps1\n```\n\n# Getting Started\n  You can watch the **'Getting Started'** video for onboarding this tool:\n  \n  \u003ca href=\"https://youtu.be/wG7MfdIq_Fo\"\u003e \u003cimg src=\"https://github.com/enisn/AbpDevTools/assets/23705418/b31a37a0-96c7-418c-8287-80922c178b3c\"/\u003e \u003c/a\u003e\n\n\n# Usage\n\nExecute `abpdev` command in the terminal and it'll show you the help message.\n\n```bash\nabpdev --help\n```\n\n# Commands\nThe following commands are available:\n\n## abpdev build\nBuilds all solutions/projects in the current directory recursively. _(Multiple solutions)_\n\n```\nabpdev build \u003cworkingdirectory\u003e [options]\n```\n\n```bash\nabpdev build -h\n\nPARAMETERS\n  workingdirectory  Working directory to run build. Probably project or solution directory path goes here. Default: . (Current Directory) \nOPTIONS\n  -f|--build-files  (Array) Names or part of names of projects or solutions will be built.\n  -i|--interactive  Interactive build file selection. Default: \"False\".\n  -c|--configuration\n  -h|--help         Shows help text.\n```\n\nConvention: `*.sln` files are considered as solutions and `*.csproj` files are considered as projects.\n\n![abpdev build](images/abpdevbuild.gif)\n\n### Example commands\n\n- Run in a specific path\n    ```bash\n    abpdev build C:\\Path\\To\\Projects\n    ```\n\n- Run in a specific configuration\n    ```bash\n    abpdev build C:\\Path\\To\\Projects -c Release\n    ```\n\n\n- Run in a specific path with specific configuration and specific projects\n    ```bash\n    abpdev build C:\\Path\\To\\Projects -c Release -f ProjectA.csproj ProjectB.csproj\n    ```\n\n- Run in interactive mode **(Select projects to build)**\n    ```bash\n    abpdev build -i\n    ```\n    ![abpdev build interactive](images/abpdevbuild-interactive.gif)\n\n## abpdev add-package\n\nAdds a NuGet package to the project and automatically configures the module dependency. This command is designed to work with **any NuGet source**, unlike the official `abp add-package` command which only works with the official ABP package registry.\n\n### The Problem with `abp add-package`\n\nABP's official CLI has a strict policy that only allows adding packages from their official registry. If you try to add a third-party package or a package from a custom NuGet source, you'll get an error:\n\n```\nPS C:\\P\\AbpSolution3025\u003e abp add-package AbpDev.QoL.Mvc.DataTables\n🔒 'AbpDev.QoL.Mvc.DataTables' nuget package could not be found!\n```\n\nThis is because `abp add-package` queries the ABP's internal package database instead of directly using the NuGet API. Any package not registered in their database will fail, even if it exists on NuGet.\n\n### The Solution: AbpDevTools `add-package`\n\nAbpDevTools takes a **developer-friendly approach**:\n\n- **NuGet source agnostic**: Uses `dotnet add package` which respects all configured sources in `nuget.config`\n- **Auto-configures DependsOn**: Automatically finds and adds the `[DependsOn(typeof(ModuleName))]` attribute to your module\n- **No assembly loading**: Uses metadata reflection to read module classes from DLLs without loading them into runtime (avoids target framework conflicts)\n- **Multi-project support**: Prompts to select from multiple projects or adds to all projects at once\n\n```\nabpdev add-package \u003cpackagename\u003e [options]\n```\n\n```bash\nabpdev add-package -h\n\nPARAMETERS\n* packagename       Name of the NuGet package to add. \n\nOPTIONS\n  -p|--project        Path to the project file (.csproj). Default: searches current directory. \n  -v|--version        Version of the package to install. \n  --prerelease      Allow installing prerelease package versions. Default: \"False\".\n  -s|--skip-dependency  Skip adding module dependency (DependsOn attribute). Default: \"False\".\n  --no-restore        Skip restoring the project after adding the package. Default: \"False\".\n  -a|--all          Add package to all projects in the solution/folder. Default: \"False\".\n  -h|--help         Shows help text.\n```\n\n### Example commands\n\n- Add a package to the current project\n    ```bash\n    abpdev add-package AbpDev.QoL.Mvc.DataTables\n    ```\n\n- Add a specific version\n    ```bash\n    abpdev add-package AbpDev.QoL.Mvc.DataTables -v 1.0.0\n    ```\n\n- Add latest prerelease version\n    ```bash\n    abpdev add-package AbpDev.QoL.Mvc.DataTables --prerelease\n    ```\n\n- Add to all projects in the solution\n    ```bash\n    abpdev add-package AbpDev.QoL.Mvc.DataTables -a\n    ```\n\n- Add to a specific project\n    ```bash\n    abpdev add-package AbpDev.QoL.Mvc.DataTables -p C:\\Path\\To\\Project.csproj\n    ```\n\n- Skip adding the DependsOn attribute (if not an ABP module)\n    ```bash\n    abpdev add-package Some.Other.Package -s\n    ```\n\n### How It Works\n\n1. **Add Package**: Uses `dotnet add package` which respects your `nuget.config` sources\n2. **Restore**: Restores packages to download the DLL to NuGet cache\n3. **Find Module**: Uses metadata reflection to find the module class in the package DLL (without loading the assembly)\n4. **Find Project Module**: Uses Roslyn to parse your project's source files to find the ABP module class\n5. **Configure Dependency**: Adds `[DependsOn(typeof(ModuleName))]` attribute to your module\n\n\u003e **Note**: This command is safe to run multiple times - it won't add duplicate dependencies.\n\n\n## abpdev run\nRuns the solution in the current directory. _(Multiple solution, multiple applications including DbMigrator)_\n\n```\nabpdev run \u003cworkingdirectory\u003e [options]\n```\n\n```bash\nPARAMETERS\n  workingdirectory  Working directory to run build. Probably project or solution directory path goes here. Default: . (Current Directory)\n\nOPTIONS\n  -w|--watch        Watch mode Default: \"False\".\n  --skip-migrate    Skips migration and runs projects directly. Default: \"False\".\n  -a|--all          Projects to run will not be asked as prompt. All of them will run. Default: \"False\".\n  --no-build        Skipts build before running. Passes '--no-build' parameter to dotnet run. Default: \"False\".\n  -i|--install-libs  Runs 'abp install-libs' command while running the project simultaneously. Default: \"False\".\n  -g|--graphBuild   Uses /graphBuild while running the applications. So no need building before running. But it may cause some performance. Default: \"False\".\n  -p|--projects     (Array) Names or part of names of projects will be ran.\n  -c|--configuration\n  -e| --env        Virtual Environment name. You can manage virtual environments by using 'abpdev env config'\n  -h|--help         Shows help text.\n```\n\nConvention: `*.csproj` files with specific names are considered as applications or dbmigrators.\n\n\u003e _Use `abpdev run config` command to change project name conventions according to your requirements_\n\n![abpdev run](images/abpdevrun.gif)\n\n### Example commands\n\n- Run multiple solutions\n    ```bash\n    abpdev run C:\\Path\\To\\Top\\Folder\\Of\\Solutions\n    ```\n    ![abpdev run multiple solutions](images/abpdevrun-multiplesolutions.gif)\n\n- Run in a specific path\n    ```bash\n    abpdev run C:\\Path\\To\\Projects\n    ```\n\n- Run in a specific configuration and specific path\n    ```bash\n    abpdev run C:\\Path\\To\\Projects -c Release\n    ```\n\n- Run all projects instead prompt selection\n    ```bash\n    abpdev run -a\n    ```\n\n    ![abpdev run all](images/abpdevrun-all.gif)\n\n- Skip migration and run projects directly\n    ```bash\n    abpdev run --skip-migrate\n    ```\n\n- Run in watch mode\n    ```bash\n    abpdev run -w\n    ```\n    \u003e Please note that we cannot print URL's because dotnet does give any output.\n\n## Virtual Environments\nVirtual environments are used to run multiple solutions with different configurations. For example, you can run different solutions with different environments _(connectionstrings etc.)_.\n\n You can manage virtual environments by using `abpdev env config` command and use those pre-configured environments with other commands like: `abpdev run -e SqlServer`. This command will use the environment named SqlServer. You can set different connectionstrings for each environment.\n\n```bash\nabpdev env config\n```\n\n\u003e You'll see the following screen. You can add, edit, delete, and select virtual environments.\n\u003e ```json\n\u003e {\n\u003e  \"SqlServer\": {\n\u003e    \"Variables\": {\n\u003e      \"ConnectionStrings__Default\": \"Server=localhost;Database={AppName}_{Today};User ID=SA;Password=12345678Aa;TrustServerCertificate=True\"\n\u003e    }\n\u003e  },\n\u003e  \"MongoDB\": {\n\u003e    \"Variables\": {\n\u003e      \"ConnectionStrings__Default\": \"mongodb://localhost:27017/{AppName}_{Today}\"\n\u003e    }\n\u003e  }\n\u003e}\n\u003e ```\n\u003e **{Today}** will be replaced with the current date. So you can run multiple solutions with different databases.\n\u003e **{AppName}** will be replaced with the application name. So you can run multiple solutions with different databases. _When app name couldn't be detected, folder name will be used.\n\n\n### Example commands\n\n- Run in a specific virtual environment\n    ```bash\n    abpdev run -e SqlServer\n    ```\n\n\n\n\n## abpdev prepare\nPrepares the project for the first running on this machine. Automatically detects project dependencies, starts required environment apps (databases, message brokers), installs ABP libraries, and creates local configuration files. You can use the `abpdev.yml` configuration file to run the project with different environments without changing the `appsettings.json` files. You can modify the created `abpdev.yml` file to change or add new environment variables to run profile.\n\n```\nabpdev prepare \u003cworkingdirectory\u003e [options]\n```\n\n```bash\nabpdev prepare -h\n\nPARAMETERS\n  workingdirectory  Working directory to run build. Probably project or solution directory path goes here. Default: . (Current Directory)\n\nOPTIONS\n  --no-config       Do not create local configuration file. (abpdev.yml) Default: \"False\".\n  -h|--help         Shows help text.\n```\n\nConvention: The command analyzes project dependencies to determine which environment apps are needed (SQL Server, MongoDB, Redis, etc.) and automatically configures the environment accordingly.\n\n![abpdev prepare](images/abpdevprepare.gif)\n\n### Example commands\n\n- Prepare project in current directory\n    ```bash\n    abpdev prepare\n    ```\n\n- Prepare project in a specific path\n    ```bash\n    abpdev prepare C:\\Path\\To\\Projects\n    ```\n\n- Prepare without creating local configuration files\n    ```bash\n    abpdev prepare --no-config\n    ```\n\nThis command performs the following operations:\n- **Dependency Analysis**: Scans projects for database and messaging dependencies\n- **Environment Apps**: Starts required Docker containers (SQL Server, MongoDB, Redis, etc.)\n- **Library Installation**: Runs `abp install-libs` to install client-side libraries\n- **Blazor Bundling**: Bundles Blazor WASM projects\n- **Configuration**: Creates `abpdev.yml` files with appropriate environment settings\n\n## abpdev logs\nFinds given project under the current directory and shows logs of it.\n\n![abpdev logs](images/abpdevlogs.gif)\n---\n![abpdev logs clear](images/abpdevlogs-clear.gif)\n\n\n```bash\n  abpdev logs \u003cprojectname\u003e [options]\n  abpdev logs [command] [...]\n\nPARAMETERS\n  projectname       Determines the project to open logs of it.\n\nOPTIONS\n  -p|--path         Working directory of the command. Probably solution directory. Default: . (CurrentDirectory)\n  -i|--interactive  Options will be asked as prompt when this option used. Default: \"False\".\n  -h|--help         Shows help text.\n\nCOMMANDS\n  clear\n```\n\n### Example commands\n\n- Show logs of the **.Web** project\n    ```bash\n    abpdev logs Web\n    ```\n\n- Clear logs of the **.Web** project\n    ```bash\n    abpdev logs clear -p Web\n    ```\n\n- Clear logs without approval\n    ```bash\n    abpdev logs clear -p Web -f\n    ```\n\n## abpdev replace\nReplaces specified text in files under the current directory recursively. Mostly used to replace connection strings in `appsettings.json` files. But it can be used for any other purposes. \n\n```bash\nUSAGE\n  abpdev replace \u003creplacementconfigname\u003e [options]\n  abpdev replace [command] [...]\n\nDESCRIPTION\n  Runs file replacement according to configuration.\n\nPARAMETERS\n  replacementconfigname  If you execute single option from config, you can pass the name or pass 'all' to execute all of them\n\nOPTIONS\n  -p|--path         Working directory of the command. Probably solution directory. Default: . (CurrentDirectory)\n  -i|--interactive  Interactive Mode. It'll ask prompt to pick one config. Default: \"False\".\n  -h|--help         Shows help text.\n\nCOMMANDS\n  config            Allows managing replacement configuration. Subcommands: config clear.\n```\n\n![abpdev replace](images/abpdevreplace.gif)\n\n\n\u003e Use `abpdev replace config` command to change file name conventions according to your requirements.\n\u003e _You'll see something like that by default:\n\u003e ```json \n\u003e {\n\u003e   \"ConnectionStrings\": {\n\u003e     \"FilePattern\": \"appsettings.json\",\n\u003e     \"Find\": \"Trusted_Connection=True;\",\n\u003e     \"Replace\": \"User ID=SA;Password=12345678Aa;\"\n\u003e   }\n\u003e }\n\u003e ```\n\n### Example commands\n\n- Replace connection strings in `appsettings.json` files\n    ```bash\n    abpdev replace ConnectionStrings\n    ```\n\n- Run all the configurations at once\n    ```bash\n    abpdev replace all\n    ```\n\n## Local Source Management\nYou can configure and manage local source mappings to easily switch between package references and local project references during development. This is especially useful when working with local forks or development versions of external packages.\n\n### Configure Local Sources\n```bash\nabpdev local-sources\n```\n\nor shortcut command for grouping all the 'references' commands:\n\n```bash\nabpdev references config\n```\n\nThis command opens a YAML configuration file where you can define your local source mappings:\n\n```yaml\nabp:\n  RemotePath: https://github.com/abpframework/abp.git\n  Path: C:\\github\\abp\n  Packages:\n    - Volo.Abp.*\n    - Volo.Abp.Core\nother-lib:\n  Path: C:\\source\\other-lib\n  Packages:\n    - MyOrg.OtherLib.*\n```\n\n**Configuration Properties:**\n- **RemotePath**: The remote repository URL _(optional)_, for cloning if not exists)\n- **Path**: Local path where the source code is located. It'll be used to find the project files. Descendants of this path will be scanned for project files.\n- **Packages**: List of package patterns to match (supports wildcards with `*`)\n\n\u003e **Important**: The order of sources in the configuration file matters. When switching references, the first matching source will be used for a package. It only matters if the same package exists in different sources. Otherwise, don't worry about it.\n\n## Reference Management\nManage project and package references efficiently with local source switching capabilities.\n\n### Switch to Local References\nConverts package references to local project references for development:\n\n```bash\nabpdev references to-local [workingdirectory] [options]\n```\n\n```bash\nabpdev references to-local -h\n\nPARAMETERS\n  workingdirectory  Working directory to run build. Probably project or solution directory path goes here. Default: . (Current Directory)\n\nOPTIONS\n  -s|--sources      (Array) Sources to switch to local. Default: all sources.\n  -h|--help         Shows help text.\n```\n\nThis command:\n- Finds all `.csproj` files in the working directory.\n- Matches package references against configured [local source](#local-source-management) patterns\n- Converts matching packages to project references with **relative paths**\n- **Backs up** original package versions in PropertyGroup for later restoration\n\n### Switch to Package References\nConverts local project references back to package references:\n\n```bash\nabpdev references to-package [workingdirectory] [options]\n```\n\n```bash\nabpdev references to-package -h\n\nPARAMETERS\n  workingdirectory  Working directory to run build. Probably project or solution directory path goes here. Default: . (Current Directory)\n\nOPTIONS\n  -s|--sources      (Array) Sources to switch to package. Default: all sources.\n  -h|--help         Shows help text.\n```\n\nThis command:\n- Finds all `.csproj` files in the working directory\n- Identifies project references pointing to configured local sources\n- Converts them back to package references using backed-up versions\n- Prompts for version input if no backed-up version exists\n\n### Example commands\n\n- Configure local sources\n    ```bash\n    abpdev references config\n    ```\n\n- Switch all package references to local development versions\n    ```bash\n    abpdev references to-local\n    ```\n\n- Switch specific sources to local\n    ```bash\n    abpdev references to-local --sources abp\n    ```\n\n- Switch back to package references\n    ```bash\n    abpdev references to-package\n    ```\n\n- Switch specific sources back to packages\n    ```bash\n    abpdev references to-package --sources abp other-lib\n    ```\n\n- Work in specific directory\n    ```bash\n    abpdev references to-local C:\\Path\\To\\Projects --sources abp\n    ```\n\n## Enable Notifications\nYou can enable notifications to get notified when a build or run process is completed. You can enable it by using `abpdev enable-notifications` command and disable it by using `abpdev disable-notifications` command.\n\n\u003e _It only works on **Windows** and **MacOS**. Linux is not supported yet._\n\n```bash\nabpdev enable-notifications\nabpdev disable-notifications\n```\n\nIt'll send a notification when a **migration**, **build** or **run** process is completed.\n\n![abpdev notifications](images/abpdevnotification.gif)\n\n\n## Environment Apps\nYou can easily run commonly used environment apps like **SQL Server**, **PostgreSQL**, **Redis**, **MySQL**, **MongoDB** and **RabbitMQ** by using `abpdev envapp start` command.\n\n```bash\nabpdev envapp [command] \u003cappname\u003e [options]\n\nabpdev envapp start \u003cappname\u003e [options]\nabpdev envapp stop \u003cappname\u003e [options]\n```\n\n\u003e You can change the default running commands by using `abpdev envapp config` command.\n\n![abpdev envapp](images/abpdevenvapp.gif)\n\nAvailable app names by **default**:\n```bash\n - sqlserver\n - sqlserver-edge\n - postgresql\n - mysql\n - mongodb\n - redis\n - rabbitmq\n```\n\n_You can extend the list or change environments of apps by using `abpdev envapp config` command._\n\n### Example commands\n\n- Start SQL Server with custom SA password\n    ```bash\n    abpdev envapp start sqlserver -p myPassw0rd\n    ```\n\n## Switch ABP Studio Version\nSwitches the locally installed **ABP Studio** to any published version/channel, ensuring directories exist, caching packages for reuse, and invoking the platform-specific updater with live log streaming and desktop notifications.\n\n```bash\nabpdev abp-studio switch \u003cversion\u003e [options]\n```\n\n```bash\nPARAMETERS\n  version            Target ABP Studio version to install. Default: 1.0.0\n\nOPTIONS\n  -c|--channel       Channel to download from. Default: \"stable\".\n  -f|--force         Forces re-download even if the package already exists.\n  -i|--install-dir   Custom install directory. Default: %LOCALAPPDATA%\\abp-studio (Windows) or OS equivalent.\n  -p|--packages-dir  Custom cache directory for downloaded packages.\n  -h|--help          Shows help text.\n```\n\nThe command:\n\n- Detects your OS/CPU (Windows x64/ARM, macOS Intel/ARM, Linux) to pick the right package suffix.\n- Creates/uses the requested install and packages directories _(defaults to `%LOCALAPPDATA%\\abp-studio` on Windows, `/Applications` or `~/Applications` on macOS)_.\n- Streams download progress while fetching `abp-studio-{version}-{channel}-full.nupkg`; `--force` wipes existing packages first.\n- Verifies that the platform updater (`Update.exe` on Windows or `UpdateMac` on macOS) exists before applying `apply --package \u003cpath\u003e`.\n- Applies the downloaded package to the installed ABP Studio by using official updater. \n\n\u003e ⚠️ This command doesn't add any custom DLL or executable files to your system. It only applies **official** ABP Studio nuget packages to the existing installation.\n\nUsing a shared packages directory (for example on a fast SSD or network drive) makes switching between versions nearly instant because only the apply step needs to run.\n\n### When to use?\n\n- You're working on a project that requires a specific version of ABP Studio.\n- You need to create a new project with a specific version of ABP Studio.\n- You have a critical bug in a specific version of ABP Studio and you need to **rollback** to a previous version.\n\n\u003e ❌ Don't use this command to install ABP Studio for the first time. Use the official installer instead. This command is only for switching between versions by applying nuget package updates.\n\n### Example commands\n\n- Switch to a specific stable version (default paths)\n    ```bash\n    abpdev abp-studio switch 2.0.1\n    ```\n\n- Download and apply a beta channel release and reuse cached packages across machines\n    ```bash\n    abpdev abp-studio switch 1.1.0 -c beta -p D:\\abp-studio-cache\n    ```\n\n- Redownload and install a version even if it is already downloaded\n    ```bash\n    abpdev abp-studio switch 0.9.0 -f\n    ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenisn%2Fabpdevtools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenisn%2Fabpdevtools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenisn%2Fabpdevtools/lists"}