{"id":24151343,"url":"https://github.com/xaviersolau/slnaggregate","last_synced_at":"2026-02-23T21:45:54.205Z","repository":{"id":40904587,"uuid":"222798429","full_name":"xaviersolau/SlnAggregate","owner":"xaviersolau","description":"Aggregate all projects from several solutions in a global solution replacing package references by project references when possible.","archived":false,"fork":false,"pushed_at":"2022-12-08T09:22:00.000Z","size":92,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-30T19:29:15.705Z","etag":null,"topics":["aggregate","csproj","csproj-tooling","sln","solution","tool"],"latest_commit_sha":null,"homepage":null,"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/xaviersolau.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-19T22:03:24.000Z","updated_at":"2021-10-08T12:20:04.000Z","dependencies_parsed_at":"2023-01-25T09:45:15.483Z","dependency_job_id":null,"html_url":"https://github.com/xaviersolau/SlnAggregate","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/xaviersolau/SlnAggregate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaviersolau%2FSlnAggregate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaviersolau%2FSlnAggregate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaviersolau%2FSlnAggregate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaviersolau%2FSlnAggregate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xaviersolau","download_url":"https://codeload.github.com/xaviersolau/SlnAggregate/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xaviersolau%2FSlnAggregate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275982503,"owners_count":25564149,"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","status":"online","status_checked_at":"2025-09-19T02:00:09.700Z","response_time":108,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["aggregate","csproj","csproj-tooling","sln","solution","tool"],"created_at":"2025-01-12T09:15:14.076Z","updated_at":"2025-09-19T18:31:01.230Z","avatar_url":"https://github.com/xaviersolau.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SlnAggregate\n[![CircleCI](https://circleci.com/gh/xaviersolau/SlnAggregate.svg?style=svg)](https://circleci.com/gh/xaviersolau/SlnAggregate)\n[![Coverage Status](https://coveralls.io/repos/github/xaviersolau/SlnAggregate/badge.svg?branch=master)](https://coveralls.io/github/xaviersolau/SlnAggregate?branch=master)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![NuGet Beta](https://img.shields.io/nuget/vpre/SoloX.SlnAggregate.svg)](https://www.nuget.org/packages/SoloX.SlnAggregate)\n\nAggregate all C# projects from several solutions in a global solution replacing package references by\nproject references when possible. It is written in C# and thanks to .Net Core and the dotnet tools, it is cross platform.\n\nDon't hesitate to post issue, pull request on the project or to fork and improve the project.\n\n## License and credits\n\nSlnAggregate project is written by Xavier Solau. It's licensed under the MIT license.\n\n * * *\n\n## Installation\n\nYou can checkout this Github repository or you can use the NuGet package:\n\n**Install editing your project file (csproj):**\n```xml\n\u003cDotNetCliToolReference Include=\"SoloX.SlnAggregate\" Version=\"1.0.0-alpha.4\" /\u003e\n```\n\nOr using the dotnet tool install command:\n\n**Install with dotnet:**\n```bash\n# Install globally:\ndotnet tool install -g SoloX.SlnAggregate --version 1.0.0-alpha.4\n\n# or in a specific 'target' folder\ndotnet tool install SoloX.SlnAggregate --version 1.0.0-alpha.4 --tool-path target\n```\n\n## How to use it\n\nIn order to generate the shadow files, you will need to type:\n\n```bash\nSlnAggregate aggregate YourSolutionRootPath\nor you can filter the folders you work on:\nSlnAggregate aggregate YourSolutionRootPath --filters path1;path2;path3\n```\n\nOnce your changes are done, you can push your changes back to the original project files:\n\n```bash\nSlnAggregate push YourSolutionRootPath\nor you can filter the folders you work on:\nSlnAggregate push YourSolutionRootPath --filters path1;path2;path3\n```\n\n### The use case\n\nLet's say that your are working on a project that has got Nuget dependencies and you need to make\nsome changes related to your current project on one or several of those dependencies. In this situation \nthis is some time convenient to work with a single solution containing all projects and replacing\npackage references by project references when possible instead of working on several solutions separately.\nThis tool will help you to aggregate all projects into one solution.\n\nLet's take an example:\n\nWe are working on a project `MyProject` defined in `MyProjectSolution` that is using a Nuget `MyNuget` defined in\n`MyNugetSolution`. Our working directory is `MyRoot`.\n\nIt gives us this working directory structure:\n\n```bash\nMyRoot\n | MyProjectSolution\n | | MyProjectSolution.sln\n | | MyProject\n | | | MyProject.csproj # Referencing the nuget MyNuget\n | MyNugetSolution\n | | MyNugetSolution.sln\n | | MyNuget\n | | | MyNuget.csproj # Defining the nuget MyNuget\n```\n\nThe SlnAggregate tool will generate a global solution file `MyRoot.sln` referencing the projects through \"shadow\"\nproject files. Those \"shadow\" files are in fact the project images modified in a way that the package references\nare replaced when possible by the corresponding project references.\n\nThe result of this generation will give us this structure:\n\n```bash\nMyRoot\n | MyRoot.sln (Generated)\n | MyProjectSolution\n | | MyProjectSolution.sln\n | | MyProject\n | | | MyProject.csproj # Referencing the nuget MyNuget\n | | | MyProject.Shadow.csproj # (Generated) Referencing the project MyNuget.Shadow.csproj\n | MyNugetSolution\n | | MyNugetSolution.sln\n | | MyNuget\n | | | MyNuget.csproj # Defining the nuget MyNuget and referenced by MyProject.csproj\n | | | MyNuget.Shadow.csproj # (Generated) Referenced by MyProject.Shadow.csproj\n```\n\n It is now possible to open the `MyRoot.sln` and to work on the projects as if they were defined in the same solution\n from the beginning.\n\n Warning: If we add projects or if we change references in the shadow project files, we will have to manually report the changes\n into the original project files.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxaviersolau%2Fslnaggregate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxaviersolau%2Fslnaggregate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxaviersolau%2Fslnaggregate/lists"}