diff --git a/README.md b/README.md new file mode 100644 index 0000000..c25753c --- /dev/null +++ b/README.md @@ -0,0 +1,123 @@ +# SubSolution + +[![Change](https://github.com/ReMinoer/SubSolution/actions/workflows/change.yml/badge.svg)](https://github.com/ReMinoer/SubSolution/actions/workflows/change.yml) +[![Release](https://github.com/ReMinoer/SubSolution/actions/workflows/release.yml/badge.svg)](https://github.com/ReMinoer/SubSolution/actions/workflows/release.yml) +[![Nuget](https://img.shields.io/nuget/v/subsln?label=%20&color=004880&logo=nuget)](https://www.nuget.org/packages/subsln) + +SubSolution is a tool giving you control on your Visual Studio solutions. + +It came in three forms: + +- __Configuration files ".subsln"__ to describe the content of a Visual Studio solution. +- __Command line tool "subsln"__ to generate/update .sln files from .subsln files. +- __.NET libraries__ to manipulate read/edit/write solutions as you want. + +> SubSolution is currently released as version __v0__. All core features are already implemented but it needs to be tested in more practical cases. +> +> Also be aware of the following: +> +> - Some small API breaking changes might happen until version v1. +> - Some MSBuild project types are not supported yet. ([Supported project types](https://github.com/ReMinoer/SubSolution/blob/master/Sources/SubSolution/ProjectType.cs)) + +# Configuration files: `.subsln` + +SubSolution introduce a XML file format using extension `.subsln` to describe the content of Visual Studio solutions with a more user-friendly syntax than .sln format. You can generate solutions from it or update existing ones. + +```xml + + + + + + + + + + + +``` + +## XML Syntax + +- Describe your item hierarchy: `` + - Create folders to organize your items: `` + - Add projects with glob patterns: `` + - Add files for quick-access: `` + - Find project dependencies and dependents: `` / `` + - Include the content of existing solutions: `` / `` + - Select what you want to keep from other solutions: `` + - Apply complex filters on your item sources: `` +- Setup your solution configuration-platforms: `` / `` + - Ignore them to auto-generate from projects. + - Create new ones: `` / `` + - Match them with project configurations and platforms: `` / `` +- And a lot more options as XML attributes ! + +## Why use a `.subsln` file ? + +- It allows you to __express your organization rules__ ("those projects in that folder, unit tests in that one...") and __ensure they are respected__ on solution changes. +- It acts as a __substitute or edition assistant__ of .sln files, to describe the solution content with a __user-friendly structure__ similar to Visual Studio representation. +- It can also be used as a punctual tool, to __apply a one-time update__. +- It allows to __quickly iterate__ on your solution structure until it matches your needs, without even running Visual Studio. +- It can __build an entirely customized hierarchy__, or at contrary __mirror your file system structure__. +- It can __find and fill your solution with dependencies__ of your central project. +- It can describe solutions __in a modular way__ by including the content of a solution into another. +- It can __apply changes to multiple solutions__ sharing the same projects. +- It can __divide a big solution in smaller ones__ to reduce impact on Visual Studio performances. + +# Command line tool: `subsln` + +`subsln.exe` is a command line tool using `.subsln` configuration files to build your Visual Studio solutions. + +```bash +> subsln create MySolution +> subsln generate MySolution.subsln +> subsln validate MySolution.subsln +> subsln display MySolution.sln +``` + +Use `subsln help` or `subsln [command] --help` for more details on commands. + +## Download + +You can download the last version from [Releases page](https://github.com/ReMinoer/SubSolution/releases). + +Or install it as a tool with the [.NET SDK](https://dotnet.microsoft.com/download): + +```bash +> dotnet tool install subsln --global +``` + +# .NET libraries + +If you have specific needs or need a high level of control, you can use those .NET libraries as Nuget packages: + +- [SubSolution](): core package to edit solutions using minimum dependencies. +- [SubSolution.Builders](): solution building features used by .subsln format. +- [SubSolution.MsBuild](): project reader implementation based on MSBuild. + +The API is structured around 3 representations of solutions: + +- __`Solution`__: + - Match the Visual Studio edition experience. + - Edit the item hierarchy as it show in the Solution Explorer. + - Automatically fill solution configurations-platforms with your projects. + - Use __`ManualSolution`__ to manually fill configuration-platforms. +- __`RawSolution`__: + - Match the .sln format. + - Dedicated to input/ouput files (but hard to edit). + - Convert to/from __`Solution`__ with __`RawSolutionConverter`__/__`SolutionConverter`__. +- __`SubSolutionConfiguration`__: + - Match the .subsln format. + - Dedicated to build patterns & modular usages. + - Build __`Solution`__ with __`SolutionBuilder`__. + +## Contribute + +- Install [.NET SDK](https://dotnet.microsoft.com/download) +- Make a fork of the repo. +- Clone it locally (including submodules if you are using ReSharper in Visual Studio). +- Build the solution. + - It will automatically download [LinqToXsdCore](https://github.com/mamift/LinqToXsdCore) to generate C# from the XML schema. +- Make your changes. +- Submit a pull request. \ No newline at end of file