Tags: jrdodds/msbuild
Tags
Eliminate IDeepCloneable<T> (dotnet#7117) Fixes dotnet#6176 Context The props and items sent to loggers as part of ProjectStartedEventArgs are passed in special collections holding snapshots of props/items that are created lazily when a logger starts enumerating them. These props/items are guaranteed to be deep copies of the real props/items such that no modifications that a logger may make don't propagate back. Changes Made For props, the collection holds tuples of prop name and evaluated value. Both are strings so the concept of deep copying is implicit (strings are immutable). Similarly, for items we return TaskItem instances created over the original item, which guarantees the deep-copy semantics (TaskItems holds a copy of the metadata and a few strings). Consequentially, there is no need to explicitly deep-copy the props/items before enumeration and the IDeepCloneable<T> interface becomes unused. As an additional code cleanup, ProjectPropertyInstanceEnumeratorProxy and ProjectItemInstanceEnumeratorProxy can easily be replaced with the Select LINQ operation and are thus not needed. Here's a detailed analysis of the code that runs when enumerating props and items, without and with these changes: Props Before: When a logger calls GetEnumerator CopyOnReadEnumerable creates a list and populates it with the results of calling DeepClone on the props. During enumeration the iterator in ProjectPropertyInstanceEnumeratorProxy extracts the Name and EvaluatedValue and returns them to the logger. After: When a logger calls GetEnumerator CopyOnReadEnumerable creates a list and populates it with [Name, EvaluatedValue] tuples, saving the intermediate step of cloning. Items Before: When a logger calls GetEnumerator CopyOnReadEnumerable creates a list and populates it with the results of calling DeepClone on the items. During enumeration the iterator in ProjectItemInstanceEnumeratorProxy creates new instances of TaskItem and returns them to the logger. After: When a logger calls GetEnumerator CopyOnReadEnumerable creates a list and populates it with [ItemType, TaskItem] tuples, saving the intermediate step of cloning. Semantically the old and new behaviors are equivalent. A snapshot of prop/items is made at the point where GetEnumerator is called. Testing Existing unit tests, some tests were modified.
Final Branding For 17.0 GA (dotnet#6902) * Final branding for 17.0 GA * Move release branding to versionprefix line
Final Branding For 17.0 GA (dotnet#6902) * Final branding for 17.0 GA * Move release branding to versionprefix line
Add copy marker to FileWrites unconditionally Fixes dotnet#6917 by ensuring that the copy-marker file is _always_ added to the FileWrites item if the copy-referenced-assemblies target runs so that IncrementalClean never sees it as an 'orphan' file and then deletes it.
Merge pull request dotnet#6846 from AR-May/copycomplete-fix-backport Skip Updating CopyComplete Marker When Not Necessary
Update dependencies from https://github.com/nuget/nuget.client build … …6.0.0.230 (dotnet#6814) NuGet.Build.Tasks From Version 6.0.0-preview.4.220 -> To Version 6.0.0-preview.4.230
Merge pull request dotnet#6683 from rainersigwald/64-bit-environment Fixes dotnet#6681. ### Context The change to make Visual Studio 64-bit means that projects loaded in Visual Studio get the 64-bit MSBuild, and other tools are more likely to be loading our API in a 64-bit process as well. That found this difference between the way projects are evaluated in `devenv.exe` and in `vcxprojReader.exe`. ### Changes Made Find the VS root from the current assembly and then reconstruct the path to the appropriate MSBuild.exe based on that + the current process's bitness, ensuring that API consumers and MSBuild.exe/devenv.exe see the same MSBuildToolsPath. ### Testing Manual overlay with a trivial API consumer.
16.11 Final Branding (dotnet#6656) Co-authored-by: Rainer Sigwald <[email protected]>
Catch ArgumentException as well as BadImageFormatException when faili… …ng because of libraries without resources (dotnet#6546)
PreviousNext