-
-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathchangelog.txt
606 lines (436 loc) · 27.8 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
- - - - - - - - - - - - - - - - - - -
MvsSln - https://github.com/3F/MvsSln
- - - - - - - - - - - - - - - - - - -
[2.7] 2024.04.29
* NEW: Added default skeleton for SlnWriter in an attempt to make it easier to create from scratch.
Empty .Write() methods will use it by default or merge it with the actual Map.
* NEW: Added asynchronous metods* for SlnWriter
*Both implementations including legacy netfx4.0 target platform, and async/await for modern.
* NEW: Added SMap implementation to wrap ISlnResult.Map. More control over ISection and its handler.
* NEW: Added LhDataHelper as an additional way to prepare default handlers from data (ISlnWhData).
```
LhDataHelper hdata = new();
hdata.SetHeader(SlnHeader.MakeDefault())
.SetProjects(projects)
.SetProjectConfigs(prjConfs)
.SetSolutionConfigs(slnConf);
using SlnWriter w = new(solutionFile, hdata);
```
See related issue #61 for details.
* NEW: Implemented CreateProjectsIfNotExist option for SlnWriter.
```
using SlnWriter w = new(solutionFile, hdata);
w.Options = SlnWriterOptions.CreateProjectsIfNotExist;
// it will write according ProjectType information (both legacy or sdk-style)
w.Write();
```
Use +IProjectsToucher to override implementation.
You can find complete example in #61
* NEW: New modern LineBuilder to make creating new handlers easier or control EOL. Related issue #57.
* NEW: Added DefaultHandlers wrapper to prepare all default according to ISlnResult(ISlnWhData).
* NEW: SlnWriter: + WriteAsString() & WriteAsStringAsync() to save the result as string instead of file.
```
using SlnWriter w = new(handlers);
string data = await w.WriteAsStringAsync(sln.Result.Map);
```
* NEW: Added platform independent IObjHandler.NewLine to specify the EOL for used w\handlers.
+.UpdateNewLine() extension for a collection of handlers.
* NEW: New modern IXProject.AddReference(.., AddReferenceOptions) to control everything for `Reference` nodes.
Old signatures has been marked as obsolete and scheduled to be removed in future versions.
```
Default = HideEmbedInteropTypes | HideSpecificVersion,
DefaultResolve = Default | ResolveAssemblyName | OmitArchitecture | OmitCultureNeutral | ...
Mini = Default | HidePrivate,
MiniResolve = Mini | DefaultResolve | OmitCulture,
```
See related issue #61 for details.
* NEW: SlnWriter now supports ISlnResult -> +ISlnWhData data to preapre default handlers itself.
* NEW: Implemented overriding of GetHashCode/Equals for ImportElement, RoProperties, Projects.Item.
* NEW: +IConfPlatform.IsEqualPair(IConfPlatform)
* NEW: ProjectItem adds ability to generate a project name from a specified input path:
slnDir\ProjectName\src.csproj -> ProjectName
slnDir\ProjectName.csproj -> ProjectName
```
new ProjectItem(ProjectType.CsSdk, @$"{projName}\src.csproj", slnDir: baseDir)
```
* FIXED: Fixed bug with a disappearing `EndProject`. See related #56
* FIXED: Fixed duplicated lines when disabling some features through SlnItems.
* FIXED: Fixed lines being ignored when handlers are not prepared.
* FIXED: If the handler is not initialized as object, the corresponding entry is lost.
* FIXED: Fixed PackageInfo == Equals for null.
* CHANGED: SlnParser has been switched to UTF8 by default.
* CHANGED: SlnWriter now will ignore W\handler that will return null value at IObjHandler.Extract().
* CHANGED: Removed comparing of parent project and origin item in PropertyItem.Equals.
* CHANGED: SlnHeader is sealed now with new ctors and added SlnHeader.MakeDefault().
* CHANGED: ConfigPrj: new ctors +protected internal set for IncludeInBuild and IncludeInDeploy properties.
* CHANGED: Projects.Item and PropertyItem:
new ctors & renamed evaluatedValue, evaluatedInclude, unevaluatedValue, unevaluatedInclude
Old access still is available but marked as obsolete and scheduled to be removed in future versions.
* CHANGED: Updated path \ / logic between Windows and unix-like systems.
[2.6.2] 2023.07.12
* FIXED: Fix issue with string builder removing too much raw sln data on Unix platforms.
Related issue: https://github.com/3F/MvsSln/issues/57
Related PR: https://github.com/3F/MvsSln/pull/58
[2.6.1] 2022.02.01
* FIXED: Incorrect project instances for the active solution configuration in XProject Environment.
Related issue: https://github.com/3F/vsSolutionBuildEvent/issues/71
* FIXED: Fixed possible 'The path is not of a legal form.' when instantiating ProjectItem.
* NEW: Added .IsVc() extension method for ProjectItem objects.
* CHANGED: Updated logic for .IsSdk() extension method.
Now it will use information from ProjectType when null or empty ProjectItem.fullPath.
Otherwise, same logic from v2.5.3 described here: https://github.com/3F/MvsSln/blob/0ec96021b7/MvsSln/Extensions/ProjectItemExtension.cs#L59-L77
[2.6] 2021.08.23
* FIXED: Fixed CalculateHashCode() Extension.
Internally affects many objects due to broken GetHashCode().
* FIXED: Fixed SlnItems.ProjectDependenciesXml when empty input:
Report https://github.com/3F/MvsSln/issues/25#issuecomment-743840401
* NEW: packages.config support PR #30. Related issues #27, #28.
To activate it, use the following flags:
* PackagesConfig, PackagesConfigSolution, PackagesConfigLegacy.
For example,
```
using Sln l = new("Input.sln", SlnItems.AllNoLoad | SlnItems.PackagesConfig);
IPackageInfo found = l.Result.PackagesConfigs
.SelectMany(s => s.Packages)
.FirstOrDefault(p => p.Id.StartsWith("Microsoft."));
// found.MetaTFM ...
Version v = l.Result.PackagesConfigs.First().GetPackage("LX4Cnh")?.VersionParsed;
```
Including GetNuTool compatible packages, format:
https://github.com/3F/GetNuTool#format-of-packages-list
* NEW: Added HasValue and HasNothing properties in PropertyItem.
* NEW: Added SlnItems.AllMinimal and SlnItems.AllNoLoad in addition to SlnItems.All.
* NEW: Added IXProject.GetPackageReferences().
* CHANGED: ConfigItem.Format() marked as obsolete.
Use `ToString()` and `IConfPlatform.Formatted` instead.
[2.5.3] 2020.07.23
* FIXED: Fixed XProjectEnv. Issue #29
XProjectByFile() can destroy original properties that was prepared for solution.
Related WARN:
`Project configuration is not found <- sln [Debug|Win32]`
* CHANGED: Improved init of blank ProjectItem for GetOrLoadProject() in XProjectEnv.
Related issue #29.
* NEW: Added the following extensions for ProjectItem:
* IsCs() - Checking both legacy `ProjectType.Cs` and modern `ProjectType.CsSdk` types.
* IsFs() - Checking both legacy `ProjectType.Fs` and modern `ProjectType.FsSdk` types.
* IsVb() - Checking both legacy `ProjectType.Vb` and modern `ProjectType.VbSdk` types.
* IsSdk() - While ProjectType cannot inform the actual use of the modern Sdk style in projects,
current method will try to detect this by using the extended logic:
https://github.com/dotnet/project-system/blob/master/docs/opening-with-new-project-system.md
[2.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<T>` extension method:
```
IEnumerable<T> ForEach<T>(this IEnumerable<T> items, Action<T> 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)
[2.5.1] 2020.01.30
* FIXED: Fixed NullReferenceException when empty xml nodes in PropertyItem through ProjectProperty.
This is possible for global or environment properties, for example:
```
GetProperty("Platform")
GetProperty("Configuration")
```
* NEW: Added SDK based project types: .fsproj; .vbproj; .csproj
https://github.com/dotnet/project-system/blob/master/docs/opening-with-new-project-system.md
* NEW: PropertyItem can now be safely compared between each other:
```
new PropertyItem(...) == new PropertyItem(...)
```
* CHANGED: Updated package's tool hMSBuild 2.3
Release notes:
https://github.com/3F/hMSBuild/releases/tag/v2.3
* CHANGED: Updated package's tool GetNuTool 1.8
Release notes:
https://github.com/3F/GetNuTool/releases/tag/1.8
* NOTE: You can also use high quality Visual Studio Project Icons together with MvsSln:
https://twitter.com/GitHub3F/status/1219348325729816578
[2.5] 2019.10.17
* FIXED: Fixed parallelism problems when using Sln wrapper.
* FIXED: Incorrect initialization for ProjectReferences class.
* NEW: Added .net core based target platforms: netcoreapp2.1. + netstandard2.0. Issue #11.
* NEW: Added netfx based target platforms: net472. PR #21.
* NEW: IXProject methods:
```
+bool AddPackageReference(string id, string version, IEnumerable<KeyValuePair<string, string>> meta = null);
+Item GetFirstPackageReference(string id);
+bool RemovePackageReference(string id);
```
* CHANGED: EnvDTE features are obsolete now. Scheduled for removal in future major releases. Issue #22.
* CHANGED: MathExtension.CalculateHashCode now encapsulates GetHashCode() with null checking.
* CHANGED: Compatible signature changes for the following extension method:
```
AddOrUpdate(this IDictionary<string, string> source, IEnumerable<KeyValuePair<string, string>> items)
```
* KNOWN: Various [ possible ] problems when using modern MSBuild assemblies.
! Solution and details in our wiki:
https://github.com/3F/MvsSln/wiki/Advanced-Features
Do not hesitate to contact: https://github.com/3F/MvsSln/issues
* NOTE: Discuss the planned v3.0 and its major changes:
https://github.com/3F/MvsSln/milestone/4
[2.4] 2019.08.10
* FIXED: "The format ... of configuration is not supported". Issue #19.
* FIXED: Fixed loading of projects via `IsolatedEnv.LoadProjects()`.
* FIXED: Fixed possible NullReferenceException in `ProjectItem` constructors.
* NEW: Introduces XProjectEnv. PR #17.
An splitted IsolatedEnv as the base but without IDisposable.
```
IXProjectEnv slnEnv;
...
slnEnv = new XProjectEnv(sln, properties);
...
slnEnv = new IsolatedEnv(sln); // +IEnvironment, +IDisposable
slnEnv.Assign();
...
((IDisposable)slnEnv)?.Dispose();
```
* NEW: Added `PropertyNames` type. Regular MSBuild Properties and related.
* NEW: Added `FileExt` type for work with `ProjectType` via its file only.
* NEW: Added `Kinds` type: PRJ_UNLOADED; PRJ_SLN_DIR
* NEW: New extension methods:
```
+TVal GetOrDefault<TKey, TVal>(this IDictionary<TKey, TVal> data, TKey key, TVal def)
+bool IsEqual(this Project a, Project b)
+string GetSolutionDir(this Project eProject)
+string GetProjectRelativePath(this Project eProject)
+string GetConfig(this Project eProject)
+string GetPlatform(this Project eProject)
+string GetSolutionExt(this Project eProject)
string GetDirectoryFromFile(this string file)
Dictionary<string, string> GetFileProperties(this string file)
IDictionary<string, string> AddOrUpdate(this IDictionary<string, string> source, IDictionary<string, string> items)
bool Remove<T>(this IList<T> src, T elem, Func<T, T, bool> comparer)
bool IsLimEqual(this IXProject x, IXProject prj)
```
* CHANGED: Removed pGuid checking from `IXProjectEnv.GetOrLoadProject()`
Related to Issue #18.
* CHANGED: ISlnResult changes:
```
+`string SolutionFile`
Full path to an solution file.
Old versions still can address it through Properties.
```
* CHANGED: IConfPlatform changes:
```
+`bool IsEqualByRule(string config, string platform, bool icase = false);`
Checking an config/platform by using {Rule} instance.
```
* CHANGED: IXProjectEnv (IEnvironment) changes:
```
+`IXProject XProjectByFile(...);`
Find project by full path to file.
+`IEnumerable<IXProject> Assign(IEnumerable<Project> projects = null);`
Assign an existing `Microsoft.Build.Evaluation.Project` instances for local collection.
+`IXProject AddOrGet(Project project);`
Adds `Microsoft.Build.Evaluation.Project` instance into IXProject collection if it does not exist.
+`ProjectItemCfg ExtractItemCfg(Project project);`
Prepares data from `Microsoft.Build.Evaluation.Project` instance.
+`void UnloadAll(bool throwIfErr = true);`
Unloads all evaluated projects at current time.
+`bool Unload(IXProject xp);`
Unloads specified project.
+`IEnumerable<Project> ValidProjects`
List of valid projects such as something except `.user`,`.metaproj` but contains FirstChild / LastChild XML node.
```
* CHANGED: Updated package's tool hMSBuild 2.2
Release notes:
https://github.com/3F/hMSBuild/releases/tag/v2.2
* NOTE: The most 2.4 changes is relevant to integration with vsSolutionBuildEvent.
https://twitter.com/GitHub3F/status/1158091930309398528
https://github.com/3F/vsSolutionBuildEvent/pull/53
https://github.com/3F/MvsSln/pull/17
Find any relevant use of the new features in that project.
[2.3] 2019.06.17
* 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).
* FIXED: Possible InvalidOperationException "Sequence contains no elements".
Issue #20.
* 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
[2.2] 2019.04.08
* 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
[2.1] 2018.08.05
* 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)`
[2.0] 2017.10.05
* 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.
[1.0.1] 2017.07.21
* 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.
[1.0] 2017.07.07
* Initial public release. Extracted from vsSolutionBuildEvent project:
https://github.com/3F/vsSolutionBuildEvent
A new independent tool for complex support of the Visual Studio .sln files and its projects.