Releases: 3F/MvsSln
Releases · 3F/MvsSln
v2.3
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
🎲 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
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
🎲 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
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
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
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.