Skip to content

Releases: 3F/MvsSln

v2.3

17 Jun 11:19
@3F 3F
be6418a
Compare
Choose a tag to compare
Public release of the MvsSln 2.3

* FIXED: Added support of `.` character in solution/project configuration name.
         Issue #13.
         ~
        ```
         {Guid}.Debug.x64.x86|Any.CPU.etc.Build.0 = Debug.x64.x86|Any.CPU.etc
                \___________/ \_________/ \_____/ ^ \___________/ \_________/
        ```

* FIXED: [Broken in 2.2] Processing solution breaks when solution contains
         some unsupported/unknown project type. Issue #14. (Thanks @wouterroos).

* NEW: An `Deploy` flag support. PR #16 (Thanks @wouterroos).

       +IConfPlatformPrj.IncludeInDeploy

* NEW: Added new the following project types below. PR #15 (Thanks @wouterroos).

       +ProjectType.Deploy
       +ProjectType.Sf

* CHANGED: Updated package's tool hMSBuild 2.1

           Release notes:
           https://github.com/3F/hMSBuild/releases/tag/v2.1

CI-build-43

16 Jun 17:08
@3F 3F
c68e79c
Compare
Choose a tag to compare
CI-build-43 Pre-release
Pre-release

🎲 Nightly build of c68e79c ➾ Worker image: Visual Studio 2017; Console: ci.appveyor.com/.../build-43

Only for tests 🗨 Commit message:

Fixes #13. Adds support of . in LProjectConfigurationPlatforms + tests:

Possible symbols for Solution/Project pair includes `.` and `=`:
https://github.com/3F/MvsSln/issues/13

-_- awesome format as follow:
{A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.Debug.x64.x86|Any.CPU.etc.Build.0 = Debug.x64.x86|Any.CPU.etc
\___________________________________/  \___________/ \_________/ \_____/ ^ \___________/ \_________/

For `=` we will not support this due to errors by VS itself (VS bug from VS2010 to modern VS2019)
https://github.com/3F/MvsSln/issues/13#issuecomment-501346079

v2.2

07 Apr 21:13
@3F 3F
c9db340
Compare
Choose a tag to compare
Public release of MvsSln - v2.2

* FIXED: Fixed possible error when loading all found projects:
        'An equivalent project is already present in the project collection, ...'

* NEW: Implemented R/W Handlers for `NestedProjects` section. Issue #7

* NEW: Implemented new R/W handlers for `ExtensibilityGlobals` section.
        Use `ExtItems = 0x0400` flag to activate it.

* NEW: Implemented native object comparison for ProjectItem, SolutionFolder, and RawText.
        ```
        ~
        if(new ProjectItem(...) == new ProjectItem(...)) { ... }
        if(new SolutionFolder(...) == new SolutionFolder(...)) { ... }
        if(new RawText(...) == new RawText(...)) { ... }
        if(new ConfigItem(...) == new ConfigItem(...)) { ... }
        if((RawText)"data" == (RawText)"data") { ... }
        ```

* NEW: New constructors for `SolutionFolder`. Issue #8:
    ```
    +SolutionFolder(string fGuid, string name, IEnumerable<RawText> items)
    +SolutionFolder(Guid fGuid, string name)
    +SolutionFolder(string fGuid, string name, SolutionFolder parent, params RawText[] items)
    +SolutionFolder(string fGuid, string name, SolutionFolder? parent, IEnumerable<RawText> items)
    +SolutionFolder(string name, params RawText[] items)
    +SolutionFolder(string name, IEnumerable<RawText> items)
    +SolutionFolder(string name, SolutionFolder parent, params RawText[] items)
    +SolutionFolder(string name, SolutionFolder parent, IEnumerable<RawText> items)
    +SolutionFolder(ProjectItem pItem, params RawText[] def)
    +SolutionFolder(SolutionFolder folder)
    ```

* NEW: New constructors for `ProjectItem` (part of Issue #8):
    ```
    +ProjectItem(string name, ProjectType pType, SolutionFolder? parent = null)
    +ProjectItem(string name, ProjectType pType, string path, SolutionFolder? parent = null, string slnDir = null)
    +ProjectItem(string pGuid, string name, ProjectType pType, SolutionFolder? parent = null)
    +ProjectItem(string pGuid, string name, ProjectType pType, string path, SolutionFolder? parent = null, string slnDir = null)
    +ProjectItem(string pGuid, string name, string path, string pType, string slnDir = null)
    +ProjectItem(ProjectItem prj)
    ```

* CHANGED: `ProjectItem.ProjectTypeBy(string guid)` marked as [Obsolete] and can be removed in new versions later.
            You can use new methods when you need:
            * `Guids.ProjectTypeBy(string guid)`
            * `Guids.GuidBy(ProjectType type)`

* CHANGED: Updated package tools hMSBuild 2.0 & GetNuTool 1.7.
           Release notes:
            * https://github.com/3F/GetNuTool/releases/tag/v1.7
            * https://github.com/3F/hMSBuild/releases/tag/v2.0

CI-build-38

07 Apr 19:50
@3F 3F
2767d84
Compare
Choose a tag to compare
CI-build-38 Pre-release
Pre-release

🎲 Nightly build of 2767d84 ➾ Worker image: Visual Studio 2017; Console: ci.appveyor.com/.../build-38

Only for tests 🗨 Commit message:

Implemented new r/w handlers for ExtensibilityGlobals section.

Use ExtItems = 0x0400 flag to activate it.

See updated tests.

v2.1

05 Aug 14:37
@3F 3F
Compare
Choose a tag to compare
Public release of the MvsSln - v2.1

* FIXED: Fixed bug 'The node is not parented by this object'
         When IXProject.RemoveImport is used for `Import` elements inside `ImportGroup`.
         Related issue: https://github.com/3F/DllExport/issues/77

* NEW: Added `IXProject.AddImport(IEnumerable<ImportElement> elements, ...`
       To add 'import' elements inside ImportGroup.

* CHANGED: IXProject changes:
    * +`IXProject.PId` an unique identifier for project (not instance).
    * +`IXProject.GetRelativePath(string path)` Makes relative path from used project.
    * +`IXProject.AddImport(ImportElement element);`
    * Compatible signature update: `bool RemoveImport(ImportElement element, bool holdEmptyGroup = false)`

* CHANGED: Additional .ctors for XProject:
    * +`XProject()`
    * +`XProject(string file)`
    * +`XProject(string file, IDictionary<string, string> properties)`
    * +`XProject(Project prj)`

v2.0

05 Oct 19:50
@3F 3F
Compare
Choose a tag to compare
Public release of the MvsSln - v2.0

* NEW: Updated architecture now provides 2 types of handlers - readers (ISlnHandler) and writers (IObjHandler).
        You also can use your custom reader or writer, just implement an `ISlnHandler` or `IObjHandler`:

        ```
          class MyReader: LAbstract, ISlnHandler { ... }
          class MyWriter: WAbstract, IObjHandler { ... }
        ```

        Read the documentation for details.

* NEW: MvsSln now also may provide map of analyzed data. Parser will expose map through list of `ISection` for each line.
       To enable this, define a bit 0x0080 for type of operations to parser.
       This helps to get flexible control between readers and any writers.

       Example of using writer `WSolutionConfigurationPlatforms` together with calculated map:

        ```
          var data = new List<IConfPlatform>() {
              new ConfigSln("Debug", "Any CPU"),
              new ConfigSln("Release_net45", "x64"),
              new ConfigSln("Release", "Any CPU"),
          };

          var whandlers = new Dictionary<Type, HandlerValue>() {
              [typeof(LSolutionConfigurationPlatforms)] = new HandlerValue(new WSolutionConfigurationPlatforms(data)),
          };

          using(var w = new SlnWriter("<path_to>.sln", whandlers)) {
              w.Write(map);
          }
        ```

        Read the documentation for details.

* NEW: Implemented new writer `WProject`.
* NEW: Implemented new writer `WProjectConfigurationPlatforms`.
* NEW: Implemented new writer `WSolutionConfigurationPlatforms`.
* NEW: Implemented new writer `WVisualStudioVersion`.
* NEW: Implemented new writer `WProjectSolutionItems`.
* NEW: Implemented new reader `LVisualStudioVersion`.
* NEW: Implemented new reader `LProjectSolutionItems`.
* FIXED: Fixed possible bug when SlnItems.All &~ SlnItems.Projects.
* FIXED: Fixed possible null with PropertyItem.evaluatedValue:
           MS describes this as 'the evaluated property value, which is never null'
           But, this is not true: .NETFramework\v4.0\Microsoft.Build.dll - Version=4.0.0.0, PublicKeyToken=b03f5f7f11d50a3a

* FIXED: Fixed possible null for `IXProject.ProjectName` when project does not contain this property.
* CHANGED: `IXProject.ProjectGuid` now will return value from ProjectItem.pGuid if project file does not contain an Guid at all.
            It's actual for SDK-based projects.

* CHANGED: SlnParser now can be initialized without handlers at all.
            ```
              ISlnContainer sln = new SlnParser(false);
              sln.SlnHandlers.Register(new LMySpec());
              ...

              // to reset and register all default:
              sln.SetDefaultHandlers();
            ```

* CHANGED: Updated SlnItems: added `Map` item to create map when processing sln data.
* CHANGED: `IsolatedEnv.Load(...)` splitted and marked as virtual to leave the final implementation for user,
            to avoid problems like in Issue #1 etc.

* CHANGED: Updated abstract layer with some types from ISlnResult & ISlnResultSvc.
* CHANGED: Updated GetNuTool v1.6.1.10480_bde3e50 & hMSBuild v1.2.2.62992_3ee58c3.
* KNOWN_PROBLEM: C++ projects and their initialization for Visual Studio 2017. Issue #1.

v1.0.1

21 Jul 11:18
@3F 3F
Compare
Choose a tag to compare
Public release of the MvsSln - v1.0.1

* FIXED: Fixed possible bug with already loaded project in collection when initializing new instance of Sln.
* FIXED: Fixed `IXProject.RemoveProperty(PropertyItem property)` & `IXProject.RemoveItem(Item item)` when selected items or properties does not exist.
* FIXED: Fixed possible exception when disposing object /IsolatedEnv.
* FIXED: Fixed possible NullReferenceException for IsolatedEnv + Improved layer of IXProject.
* NEW: Added `localScope` flag for `GetProperty(string name, bool localScope = true)`.
       If true, will return default value for any special and imported properties type. It's important to use with `RemoveProperty(...)` etc.

* NEW: Added `SlnItems.LoadMinimalDefaultData` flag to load only minimal default data. For example, the only one configuration for each project.
       And its alias `EnvWithMinimalProjects` - To prepare environment with minimal loaded projects.

* NEW: Added `IXProject.Reevaluate()` - To reevaluate data of project if necessary.
       For example, if project contains 2 or more same properties by name:
       After `RemoveProperty(...)` the second property still will be unavailable for `GetProperty(...)`
       because its node does not contain this at all. Use this to update nodes, or `revalue` flag with updated `RemoveProperty(...)`

* NEW: Added `IXProject.RemoveImport(ImportElement element)` - For additional control of removing elements via IXProject.
* CHANGED: `IXProject.AddImport(...)` methods - now, does not have any restriction for adding new elements.
* CHANGED: `AssemblyName` from Projects.Item has been wrapped by `AsmData` for additional work with public key tokens etc.
* CHANGED: The result of `IXProject.GetImport(...)` has been wrapped by `ImportElement` to avoid using MBE for end user.
* CHANGED: Other list of changes:
            * `+IXProject.ProjectPath`
            * `+IXProject.ProjectFullPath`
            * `+IXProject.GlobalProperties`
            * `+IXProject.Save(string path, Encoding enc)`
            * `+IXProject.GetImport(string project, string label, bool eq = false)`
            * `+IXProject.GetImports(string project = null)`
            * `+IXProject.GetImports(string project, string label, bool eq = false)`
            * `+IXProject.AddReference(string fullpath, bool local, bool? embed = null, bool? spec = null)`
            * `+IEnvironment.LoadMinimalProjects()`

* CHANGED: Compatible update of signatures:
            * `~IXProject.AddImport(string target, bool checking, string label = null)`
            * `~IXProject.AddImport(string target, string condition, string label = null)`
            * `~IXProject.GetProperty(string name, bool localScope = true)`
            * `~IXProject.RemoveProperty(string name, bool revalue = false)`
            * `~IXProject.RemoveProperty(PropertyItem property, bool revalue = false)`
            * `~IEnvironment.LoadProjects(IEnumerable<ProjectItemCfg> pItems = null)`

* CHANGED: Incompatible minor changes with result of `ProjectImportElement GetImport(string project = null)`.
           It has been wrapped by `ImportElement` to avoid using MBE.

v1.0

07 Jul 21:02
@3F 3F
Compare
Choose a tag to compare
Public release of the MvsSln v1.0

* Initial public release.
  A tool for complex support of the Visual Studio .sln files and its projects.