From cd39a8dff3b526d2294be1c2de2fdf93f51ecb86 Mon Sep 17 00:00:00 2001 From: "Denis Kuzmin [ GitHub/3F ]" Date: Tue, 5 May 2020 16:01:24 +0300 Subject: [PATCH] Public release. MvsSln 2.5.2 * NEW: Activating ProjectReferences for existing ProjectDependencies (shallow copy) through new flag. Issue #25. ``` ProjectDependenciesXml = 0x0800 | ProjectDependencies | Env, ``` Covers ProjectDependencies (SLN) logic using data from project files (XML). Helps eliminate miscellaneous units between VS and msbuild world: https://github.com/3F/MvsSln/issues/25#issuecomment-617956253 Requires Env with loaded projects (LoadMinimalDefaultData or LoadDefaultData). A core feature in .NET DllExport Post-processing: https://github.com/3F/DllExport/pull/148 * NEW: `ProjectReference` support without obsolete projectguid. Issue #26. * NEW: IXProject methods: ``` +IXProject.GetFullPath(string relative) ``` * FIXED: Fixed possible empty records in SlnParser.SetProjectItemsConfigs. * FIXED: Fixed `The given key was not present...` when different case for keys in Item.Metadata. * FIXED: Fixed protected XProject GetProjectGuid() + GetProjectName() when empty property. * CHANGED: Compatible signature update for `ForEach` extension method: ``` IEnumerable ForEach(this IEnumerable items, Action act) ``` * CHANGED: Updated Microsoft.CSharp 4.7.0 (Only for: netstandard2.0 + netcoreapp2.1) * CHANGED: Updated Microsoft.Build 16.5.0 (Only for: netcoreapp2.1) --- .version | 2 +- MvsSln/MvsSln.csproj | 2 +- MvsSln/MvsSlnVersion.cs | 2 +- Readme.md | 8 +++-- build.bat | 2 +- changelog.txt | 38 ++++++++++++++++++++ resources/MvsSln_and_DllExport_PostProc.png | Bin 0 -> 19334 bytes 7 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 resources/MvsSln_and_DllExport_PostProc.png diff --git a/.version b/.version index 4fd0fe3..21b159d 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.5.1 \ No newline at end of file +2.5.2 \ No newline at end of file diff --git a/MvsSln/MvsSln.csproj b/MvsSln/MvsSln.csproj index 8e1159b..1bc3be0 100644 --- a/MvsSln/MvsSln.csproj +++ b/MvsSln/MvsSln.csproj @@ -2,7 +2,7 @@ - 2.5.1 + 2.5.2 diff --git a/MvsSln/MvsSlnVersion.cs b/MvsSln/MvsSlnVersion.cs index eb60471..ab83906 100644 --- a/MvsSln/MvsSlnVersion.cs +++ b/MvsSln/MvsSlnVersion.cs @@ -8,7 +8,7 @@ public struct MvsSlnVersion { public static readonly Version number = new Version(S_NUM_REV); - public const string S_NUM = "2.5.1"; + public const string S_NUM = "2.5.2"; public const string S_REV = "0"; public const string S_NUM_REV = S_NUM + "." + S_REV; diff --git a/Readme.md b/Readme.md index 5b58572..fbd8bc3 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,7 @@ 🧩 Customizable VisualStudio .sln parser, Complex support of the projects (.vcxproj, .csproj., …), Pluginable lightweight r/w handlers at runtime, and more … [![Build status](https://ci.appveyor.com/api/projects/status/6uunsds889rhkpo2/branch/master?svg=true)](https://ci.appveyor.com/project/3Fs/mvssln-fxjnf/branch/master) -[![release-src](https://img.shields.io/github/release/3F/MvsSln.svg)](https://github.com/3F/MvsSln/releases/latest) +[![release](https://img.shields.io/github/release/3F/MvsSln.svg)](https://github.com/3F/MvsSln/releases/latest) [![License](https://img.shields.io/badge/License-MIT-74A5C2.svg)](https://github.com/3F/MvsSln/blob/master/License.txt) [![NuGet package](https://img.shields.io/nuget/v/MvsSln.svg)](https://www.nuget.org/packages/MvsSln/) [![Tests](https://img.shields.io/appveyor/tests/3Fs/mvssln-fxjnf/master.svg)](https://ci.appveyor.com/project/3Fs/mvssln-fxjnf/build/tests) @@ -147,6 +147,10 @@ DllExport project finally changed distribution of the packages starting with v1. ![](https://raw.githubusercontent.com/3F/MvsSln/master/resources/MvsSln_DllExport_example.png) +MvsSln is also **a core logic** in *Post-Processing* feature [[?]](https://github.com/3F/DllExport/pull/148) + +![](resources/MvsSln_and_DllExport_PostProc.png) + ### vsSolutionBuildEvent vsSolutionBuildEvent now is completely integrated with MvsSln [[?](https://github.com/3F/vsSolutionBuildEvent/pull/53)] @@ -276,7 +280,7 @@ You can also specify it via `System.Reflection.Assembly` etc. ## High quality Project Icons. Visual Studio -Since Microsoft officially distributes free 5,000 high quality free icons and bitmaps from products like Visual Studio: +Since Microsoft officially distributes 5,000 high quality free icons and bitmaps from products like Visual Studio: [https://twitter.com/GitHub3F/status/1219348325729816578](https://twitter.com/GitHub3F/status/1219348325729816578) diff --git a/build.bat b/build.bat index ac75abd..e1719ec 100644 --- a/build.bat +++ b/build.bat @@ -1,6 +1,6 @@ @echo off -set cim=packages\vsSolutionBuildEvent\cim.cmd +set cim=packages\vsSolutionBuildEvent\cim.cmd -vsw-priority Microsoft.NetCore.Component.SDK set _gnt=tools/gnt set reltype=%~1 diff --git a/changelog.txt b/changelog.txt index 67e3f91..3db21c6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,44 @@ MvsSln - https://github.com/3F/MvsSln - - - - - - - - - - - - - - - - - - - +[v2.5.2] 2020.05.05 + + * NEW: Activating ProjectReferences for existing ProjectDependencies (shallow copy) through new flag. + Issue #25. + ``` + ProjectDependenciesXml = 0x0800 | ProjectDependencies | Env, + ``` + Covers ProjectDependencies (SLN) logic using data from project files (XML). + Helps eliminate miscellaneous units between VS and msbuild world: + https://github.com/3F/MvsSln/issues/25#issuecomment-617956253 + Requires Env with loaded projects (LoadMinimalDefaultData or LoadDefaultData). + + A core feature in .NET DllExport Post-processing: + https://github.com/3F/DllExport/pull/148 + + * NEW: `ProjectReference` support without obsolete projectguid. Issue #26. + + * NEW: IXProject methods: + ``` + +IXProject.GetFullPath(string relative) + ``` + + * FIXED: Fixed possible empty records in SlnParser.SetProjectItemsConfigs. + + * FIXED: Fixed `The given key was not present...` when different case for keys in Item.Metadata. + + * FIXED: Fixed protected XProject GetProjectGuid() + GetProjectName() when empty property. + + * CHANGED: Compatible signature update for `ForEach` extension method: + ``` + IEnumerable ForEach(this IEnumerable items, Action act) + ``` + + * CHANGED: Updated Microsoft.CSharp 4.7.0 (Only for: netstandard2.0 + netcoreapp2.1) + + * CHANGED: Updated Microsoft.Build 16.5.0 (Only for: netcoreapp2.1) + + [v2.5.1] 2020.01.30 * FIXED: Fixed NullReferenceException when empty xml nodes in PropertyItem through ProjectProperty. diff --git a/resources/MvsSln_and_DllExport_PostProc.png b/resources/MvsSln_and_DllExport_PostProc.png new file mode 100644 index 0000000000000000000000000000000000000000..33d3cb26fb11fd1f9850a02e5f4ac77310239ba9 GIT binary patch literal 19334 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 literal 0 HcmV?d00001