Repository navigation
Core support for AbsolutePath/FileInfo/DirectoryInfo and ITaskItem<T> as task parameters - #13971
Conversation
There was a problem hiding this comment.
Pull request overview
Adds core infrastructure to support strongly-typed MSBuild task parameters and outputs for path-like values, including a new AbsolutePath-based flow, FileInfo/DirectoryInfo binding, and generic task items (ITaskItem<T> / TaskItem<T>). This primarily touches the task parameter binding pipeline (TaskExecutionHost), parameter type validation/serialization (TaskParameter*), and adds corresponding unit tests + docs updates.
Changes:
- Introduces
ITaskItem<T>(Framework) andTaskItem<T>(Utilities) to enable typed item identities. - Adds
ValueTypeParserand switches task output serialization to a canonical string conversion path. - Extends
TaskExecutionHostbinding + unit tests to coverAbsolutePath,FileInfo/DirectoryInfo, and typed task items.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Utilities/TaskItem_T.cs | New TaskItem<T> struct implementing typed task items over an ITaskItem backing instance. |
| src/Utilities.UnitTests/TaskItem_Tests.cs | Unit tests for TaskItem<T> metadata behavior and parsing behavior. |
| src/Tasks/Microsoft.Build.Tasks.csproj | Minor ItemGroup structure tweak. |
| src/Shared/ValueTypeParser.cs | New shared parser/formatter for value-like task parameter conversions. |
| src/Shared/UnitTests/TaskParameter_Tests.cs | Adds serialization tests for AbsolutePath / FileInfo / DirectoryInfo. |
| src/Shared/TaskParameterTypeVerifier.cs | Extends supported parameter types to include typed items and path-related types. |
| src/Shared/TaskParameter.cs | Updates value-type output serialization to use ValueTypeParser and support FileInfo/DirectoryInfo. |
| src/Framework/Microsoft.Build.Framework.csproj | Links ValueTypeParser.cs into Framework build. |
| src/Framework/ITaskItem_T.cs | New public ITaskItem<T> interface. |
| src/Build/Microsoft.Build.csproj | Adds Build → Utilities project reference (to use TaskItem<T>). |
| src/Build/BackEnd/TaskExecutionHost/TaskExecutionHost.cs | Adds parameter binding + output gathering support for typed path parameters and typed task items. |
| src/Build.UnitTests/BackEnd/TaskParameterTypeVerifier_Tests.cs | New tests covering typed parameter validation scenarios. |
| src/Build.UnitTests/BackEnd/TaskExecutionHost_Tests.cs | Expanded tests for new parameter types and typed task items. |
| src/Build.UnitTests/BackEnd/TaskBuilderTestTask.cs | Adds test task properties/outputs for new supported parameter types. |
| documentation/wiki/Tasks.md | Updates docs for supported task parameter types. |
jankratochvilcz
left a comment
There was a problem hiding this comment.
Left a few comments. The biggest thing we should discuss is whether this is the only architecture viable in the codebase - It would be great to ideate if we can have a more self-contained implementation.
a4d536e to
b62b5ae
Compare
|
Remaining test failures are buildcheck related - I can't repro locally, but I also haven't been able to collect binlogs from these tests in the CI pipelines. |
The TASKHOST define is no longer set by any project in the main codebase since the .NET 3.5 taskhost was separated into a frozen project. These guards were always evaluating to true. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The out-of-proc task host gathers all [Output] properties and serializes them via TaskParameter. The PR's new AbsolutePath/FileInfo/DirectoryInfo outputs crashed the node: AbsolutePath (a struct) is never null so it always serialized, and Convert.ChangeType threw InvalidCastException because it is not IConvertible; FileInfo/DirectoryInfo additionally hit Assumed.Unreachable in the constructor. Route FileInfo/DirectoryInfo (scalar and array) to ValueType/ValueTypeArray, and convert values on the write side using ValueTypeParser.ToString - the same canonical conversion the in-process engine uses in TaskExecutionHost.GetValueOutputs - so in-proc and out-of-proc produce identical strings. Harden ValueTypeParser.ToString for a default AbsolutePath (null Value). The legacy net35 task host is intentionally untouched. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Unwrap TargetInvocationException in CreateTaskItemOfT so that parse errors from value-type constructors surface as the original exception (typically InvalidProjectFileException) rather than being wrapped in TargetInvocationException, which was swallowed by the outer catch. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
TaskItemData throws InvalidOperationException on all write operations (SetMetadata, RemoveMetadata, CopyMetadataTo). Switch the TaskItem<T>(T) constructor to use Utilities.TaskItem as the backing item, which supports full metadata mutation as expected by ITaskItem consumers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When constructing TaskItem<T> from an ITaskItem where T is FileInfo, DirectoryInfo, or AbsolutePath, prefer the FullPath metadata (which the MSBuild item system computes as an absolute rooted path) over ItemSpec, which may be a relative path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace Value?.Equals(other.Value) with EqualityComparer<T>.Default.Equals to avoid boxing for value types, correctly handle null reference types, and use the appropriate comparer for each type T. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The code already correctly handles ITaskItem<T>[] for both input (IsValidVectorInputParameter) and output (IsAssignableToITaskItem), but had no explicit test coverage. Add tests for all four methods covering scalar and array ITaskItem<T> to prevent future regressions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Treat arrays with ITaskItem-implementing element types as assignable outputs so TaskItem<T>[] follows the item-output path consistently with TaskExecutionHost behavior. Add unit tests covering TaskItem<int>[] assignability and output validity. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…nfo, DirectoryInfo) in PR1 Value-type T (int, bool, etc.) support for ITaskItem<T> will be added in a subsequent PR. Also remove ITaskItem<int> tests from PR1 test files. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Updated [Microsoft.Build](https://github.com/dotnet/msbuild) from 17.14.28 to 18.11.0. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Build's releases](https://github.com/dotnet/msbuild/releases)._ ## 18.11.0 ## What's Changed * Add vs18.10 to merge-flow config; retire vs18.7 by @AlesProkop in https://github.com/dotnet/msbuild/pull/14563 * Bump main to 18.11.0 after vs18.10 snap by @AlesProkop in https://github.com/dotnet/msbuild/pull/14564 * Phase out ChangeWaves 17.10, 17.12, 17.14 and 18.3 by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14551 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14572 * Default XML tasks to prohibit DTDs and improve DTD error diagnostics by @VolPlita in https://github.com/dotnet/msbuild/pull/14285 * Don't log TaskAssemblyLocationMismatch for task-host-routed tasks by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14550 * Scope MSBuild server and coordinator resource names to the current user by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14543 * Promote MSBuild server out of Experimental namespace (#12099) by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13964 * Fix builds by adding missing using by @rainersigwald in https://github.com/dotnet/msbuild/pull/14587 * Add event-level task telemetry (build/tasks/details) by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13609 * Migrate ResolveCodeAnalysisRuleSet to multithreaded execution by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13636 * Use <inheritdoc /> for TaskEnvironment in ResolveCodeAnalysisRuleSet by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/14589 * Add aliases for configuration and test parameters in build scripts by @AR-May in https://github.com/dotnet/msbuild/pull/14591 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14617 * Emit assemblyName payload for FallbackAssemblyLoad EventSource events by @AR-May in https://github.com/dotnet/msbuild/pull/14014 * Bump github/gh-aw-actions/setup-cli from 0.83.3 to 0.84.1 by @dependabot[bot] in https://github.com/dotnet/msbuild/pull/14611 * Bump github/gh-aw-actions/setup from 0.83.3 to 0.84.1 by @dependabot[bot] in https://github.com/dotnet/msbuild/pull/14610 * Migrate GetAssembliesMetadata to multithreaded execution by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13637 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14619 * Fix concurrent BuildCheck callback mutation by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/14590 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14612 * Make experimental VS insertion reviewers configurable by @rainersigwald in https://github.com/dotnet/msbuild/pull/14632 * Fix NullReferenceException reporting file accesses for detoured nodes by @dfederm in https://github.com/dotnet/msbuild/pull/14602 * Scope .NET TaskHost handshake leniency to architecture by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14579 * Ensure MSBuild.csproj is included for Release|ARM64 by @KirillOsenkov in https://github.com/dotnet/msbuild/pull/14622 * Declare the Sdk element in Microsoft.Build.Core.xsd by @ViktorHofer with @Copilot in https://github.com/dotnet/msbuild/pull/14637 * Call out MSBUILD_LOGGING_ARGS by @rainersigwald in https://github.com/dotnet/msbuild/pull/14641 * [Spec] Define MSBuild server child-process ownership by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14508 * Pre-buffer TaskHost packet bodies before deserialization by @AR-May in https://github.com/dotnet/msbuild/pull/14505 * Expose item glob patterns via MSBuildProvideItemGlobs by @drewnoakes in https://github.com/dotnet/msbuild/pull/14389 * Avoid republishing coverage artifacts on CI retries by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14423 * Make the resolved change wave part of the node handshake by @JanProvaznik with @Copilot in https://github.com/dotnet/msbuild/pull/14557 * Bump github/gh-aw-actions/setup from 0.84.1 to 0.86.1 by @dependabot[bot] in https://github.com/dotnet/msbuild/pull/14665 * Bump github/gh-aw-actions/setup-cli from 0.84.1 to 0.86.1 by @dependabot[bot] in https://github.com/dotnet/msbuild/pull/14664 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14672 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14677 * Give each transient MSBuild Server its own identity by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14647 * Don't discard the XML cache after restore when it reloads from disk by @ViktorHofer in https://github.com/dotnet/msbuild/pull/14558 * Add TarDirectory and Untar tasks for creating and extracting tar archives by @ViktorHofer with @Copilot in https://github.com/dotnet/msbuild/pull/14451 * Add Directory.Parse.config to skip unknown attributes/elements during parsing by @benwitmanmsft in https://github.com/dotnet/msbuild/pull/14588 * Revert branch freeze PowerShell automation by @AlesProkop in https://github.com/dotnet/msbuild/pull/14692 * Fix MT switch by @AR-May in https://github.com/dotnet/msbuild/pull/14682 * Document multi-request target crosstalk by @rainersigwald in https://github.com/dotnet/msbuild/pull/14403 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14698 * Keep project active through post-build telemetry by @AR-May in https://github.com/dotnet/msbuild/pull/14679 * Make eng/build.sh portable (don't hardcode /bin/bash) by @ViktorHofer in https://github.com/dotnet/msbuild/pull/14707 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14709 * Drop stale secret group by @rainersigwald in https://github.com/dotnet/msbuild/pull/14710 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14713 ... (truncated) ## 18.10.1 ## What's Changed * [vs16.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13103 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13796 * [vs17.8] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13902 * [vs17.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13903 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13909 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13986 * Add vs18.9 to merge-flow config; retire vs18.3 by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14214 * Bump labeler-cache-retention to use issue-labeler v2.1.0 by @jeffhandley in https://github.com/dotnet/msbuild/pull/14171 * Bump main to 18.10.0 after vs18.9 snap by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14216 * Improve release skill: Phase 2 DARC rules, VMR backflow, deterministic baseline by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14220 * Determinize release: hardcode OptProf baseline + Phase 3.2 baseline resolver by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14222 * Serialize BuildRequestConfiguration.RequestedTargets to fix solution metaproject MSB4057 in parallel builds by @ViktorHofer in https://github.com/dotnet/msbuild/pull/14223 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14203 * Core support for AbsolutePath/FileInfo/DirectoryInfo and ITaskItem<T> as task parameters by @baronfel in https://github.com/dotnet/msbuild/pull/13971 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14206 * Fix existence cache kind poisoning by @AlesProkop in https://github.com/dotnet/msbuild/pull/14249 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14226 * Don't disable the MSBuild server for /mt builds when node reuse is off by @AR-May in https://github.com/dotnet/msbuild/pull/14248 * Enhance expert reviewer guidelines with additional checks. by @AR-May in https://github.com/dotnet/msbuild/pull/14255 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14253 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14268 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14267 * Bump github/gh-aw-actions/setup from 0.81.6 to 0.82.2 by @dependabot[bot] in https://github.com/dotnet/msbuild/pull/14266 * Avoid boxing the struct enumerator in PropertyDictionary<T>.GetEnumerator() by @nareshjo in https://github.com/dotnet/msbuild/pull/14272 * Refresh copy marker when implementation output changes by @AlesProkop in https://github.com/dotnet/msbuild/pull/14231 * Send task-host build process environment as delta by @OvesN in https://github.com/dotnet/msbuild/pull/14126 * Add regression coverage for metadata newline preservation by @VolPlita in https://github.com/dotnet/msbuild/pull/14261 * Fix EmbedInBinlog items with relative paths from child projects by @huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13990 * Stop requiring VersionPrefix updates in servicing - insert prerelease versions to VS by @ViktorHofer in https://github.com/dotnet/msbuild/pull/14277 * Fix WriteLinesToFile rewriting unchanged file when custom encoding is used by @huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/14146 * Enable trim/AOT analyzers for Microsoft.Build and clean up annotations by @JeremyKuhne in https://github.com/dotnet/msbuild/pull/14064 * [automated] Merge branch 'vs18.9' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/14291 * Fix MicroBuild plugin feed URL to use allowed pkgs.dev.azure.com format by @AlesProkop in https://github.com/dotnet/msbuild/pull/14295 * Pass ExcludeRestorePackageImports during restore to avoid redundant evaluations by @ViktorHofer with @Copilot in https://github.com/dotnet/msbuild/pull/14274 * [vs18.7] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13988 * Adopt Clever Test Selection (CTS) as parallel, non-blocking PR pipeline by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/14212 * Harden exceptions when connecting to server by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14292 * Update MicrosoftBuildVersion in analyzer template by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13886 * Fix MSBuild Server client dropping build result under WaitAny race (#14172) by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14251 * Partially revert #13660: remove NuGet RestoreTask transient TaskHost workaround by @JanProvaznik in https://github.com/dotnet/msbuild/pull/14297 * Disable daily AI credits guardrail for Expert Code Review workflow by @JanProvaznik with @Copilot in https://github.com/dotnet/msbuild/pull/14314 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 14614733 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/14246 * Add opt-in partial (stop-after-pass) project evaluation by @ViktorHofer in https://github.com/dotnet/msbuild/pull/14290 * Use partial evaluation for -getProperty/-getItem without a target by @ViktorHofer in https://github.com/dotnet/msbuild/pull/14296 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14324 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14333 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14330 * Bump github/gh-aw-actions/setup from 0.82.2 to 0.82.8 by @dependabot[bot] in https://github.com/dotnet/msbuild/pull/14328 * Restrict partial evaluation to ProjectInstance by @ViktorHofer in https://github.com/dotnet/msbuild/pull/14340 ... (truncated) ## 18.9.6 ## What's Changed * [vs18.6] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13793 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13859 * [vs18.6] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13858 * [vs18.7] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13863 * CsWin32 follow-up: CLR metadata + TypeLib interop migration by @JeremyKuhne in https://github.com/dotnet/msbuild/pull/13853 * Update vmr-sb-validation.yml for Azure Pipelines by @meghnave in https://github.com/dotnet/msbuild/pull/13871 * Test: keep shell alive 15s in ToolTaskCanChangeCanonicalErrorFormat (#13734) by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13878 * Add vs18.8 to merge-flow config by @OvesN in https://github.com/dotnet/msbuild/pull/13877 * Stable branding for 18.8 release by @OvesN in https://github.com/dotnet/msbuild/pull/13883 * Bump main to 18.9.0 after vs18.8 snap by @OvesN in https://github.com/dotnet/msbuild/pull/13880 * Avoid checkout in insertion pipeline by @rainersigwald in https://github.com/dotnet/msbuild/pull/13887 * Report actual launch path in MSB4216 for Runtime="NET" task host by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13889 * Migrate Tlblmp and AxImp to Multithreaded Execution by @AlesProkop in https://github.com/dotnet/msbuild/pull/13708 * Replace ErrorUtilities assertion methods with Assumed API and BCL throw helpers by @DustinCampbell in https://github.com/dotnet/msbuild/pull/13790 * Fix CLR_E_SHIM_RUNTIMELOAD in RAR's IMetaDataDispenser activation by @JeremyKuhne in https://github.com/dotnet/msbuild/pull/13899 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13905 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13907 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13910 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13908 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13906 * Fix ToolTask output loss: increase EOF pipe timeout from 2s to 30s by @huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13767 * Improve symlink cycle condition by @GangWang01 in https://github.com/dotnet/msbuild/pull/13901 * [vs18.6] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13904 * Add flaky-test detection and auto-fix agentic workflows by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13915 * Quote --ignore-exit-code values so the quarantine pipeline does not shell-split on Unix by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13918 * Fix flaky-test detector PR-evidence loss and raise scan limits by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13919 * Tighten the pr review agent by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13921 * Add environment variables for governance detection by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13920 * Change IsPackable to true and add IsShipping flag by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13924 * [vs18.7] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13911 * Make flaky detector verify recurrence postdates the fix before commenting by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13930 * Fix AbsolutePath.GetCanonicalForm process state leak on Windows by @OvesN in https://github.com/dotnet/msbuild/pull/13788 * Fix flaky detector: unblock dnceng feed, fail fast, and defer quarantine to a second run by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13936 * Update documentation for ImplicitUsings element by @drewnoakes in https://github.com/dotnet/msbuild/pull/13900 * [vs18.6] Point OptProf bootstrapper at rel/stable instead of int.main by @AlesProkop in https://github.com/dotnet/msbuild/pull/13923 * Add CS8618 suppressor for required MSBuild task properties by @AArnott in https://github.com/dotnet/msbuild/pull/13926 * Tighten NodeLaunchData.EnvironmentOverrides nullability to IDictionary<string, string?>? by @OvesN with @Copilot in https://github.com/dotnet/msbuild/pull/13815 * Fix ToolTask EOF wait to be STA-safe via CountdownEvent (MSB4018 in AspNetCompiler) by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13917 * [automated] Merge branch 'vs18.6' => 'vs18.7' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13941 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 14192258 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13849 * Bumping to 10.0.8 runtime packages by @OvesN in https://github.com/dotnet/msbuild/pull/13898 * Flaky-test workflow: reassure on empty PR list + drop local reproduction (quarantine-first) by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13938 * [Flaky Test] Un-quarantine 5 consistently-green tests by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13952 * Flaky-test detector: open PRs ready-for-review; drop newly-filed-issues section from PR body by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13958 * [Flaky Test] Quarantine 4 flaky tests by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13937 * Flaky-test: fix duplicate-issue bug by switching dedup key to a visible code-block key by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13963 * CsWin32 follow-up: WindowsNative + VS Setup Configuration + remaining hand-rolled interop by @JeremyKuhne in https://github.com/dotnet/msbuild/pull/13872 * Add the reviewer release skill checking if the Learn article Change waves is updated by @GangWang01 in https://github.com/dotnet/msbuild/pull/13840 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13977 ... (truncated) ## 18.8.2 ## What's Changed * [vs16.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12550 * [vs17.8] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12739 * [vs17.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12740 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12743 * Add clear error message (MSB4233) for .NET runtime tasks on MSBuild 17.14 by @baronfel with @Copilot in https://github.com/dotnet/msbuild/pull/12662 * [vs17.8] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12759 * [vs17.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12760 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12762 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12744 * Remove audit sources from NuGet.config by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12796 * Bump System.Configuration.ConfigurationManager to 6.0.0 # by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12795 * Enable localization for vs17.14 build by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12799 * [vs17.8] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12814 * [vs17.14] Add test summary always in terminal logger by @nohwnd in https://github.com/dotnet/msbuild/pull/12852 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12575 * [vs17.8] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12889 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12892 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12891 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 12921813 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/12897 * Disable Localization for vs17.14 by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12903 * [automated] Merge branch 'vs16.11' => 'vs17.8' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/12798 * [vs17.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12815 * [automated] Merge branch 'vs17.14' => 'vs18.0' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/12917 * [vs17.8] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12934 * [vs17.11] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12935 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12941 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12940 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12939 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12966 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12965 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12964 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13038 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13049 * [vs18.0] Fix MSB1025 error when using DistributedFileLogger (-dfl flag) by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13039 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13037 * [automated] Merge branch 'vs18.0' => 'vs18.3' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13052 * [vs17.12] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13101 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13098 * [vs17.14] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13100 * [vs18.3] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13102 * Backflow 10.0.2xx VMR by @dkurepa in https://github.com/dotnet/msbuild/pull/13121 * Disable localization for vs18.0 in build configuration by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13164 * Disable localization for vs18.3 by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13165 * [vs18.3] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13161 * [vs18.3] Stabilize package versions by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13233 * [vs18.3] Add Managed Identity for bootstrapper creation by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13249 * [automated] Merge branch 'vs18.0' => 'vs18.3' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13167 * [vs18.3] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13228 * [vs18.0] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13159 ... (truncated) ## 18.7.1 ## What's Changed * Fix TraceEngine file contention deadlock in multithreaded mode by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13446 * Remove duplicate test cases in MultithreadableTaskAnalyzer by @Youssef1313 in https://github.com/dotnet/msbuild/pull/13483 * Ensure ThreadSafeTaskAnalyzer.Tests is considered as a unit test project by @Youssef1313 in https://github.com/dotnet/msbuild/pull/13481 * Fix MSBuildTask0002 analyzer warnings in already-migrated tasks by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13466 * Fix race conditions in task host path resolution by @AR-May in https://github.com/dotnet/msbuild/pull/13485 * Migrate ToolTask and Al task to TaskEnvironment API by @OvesN in https://github.com/dotnet/msbuild/pull/13423 * Bump main to 18.7, add vs18.6 to merge flow by @MichalPavlik in https://github.com/dotnet/msbuild/pull/13472 * Avoid allocations in GetHashCode implementations by @DustinCampbell in https://github.com/dotnet/msbuild/pull/13475 * Add PATs rotation to agentic workflow(s) by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13496 * Fix ASP.NET WebSite projects to copy netstandard.dll facade when required by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13058 * Migrate AspNetCompiler to TaskEnvironment API by @OvesN in https://github.com/dotnet/msbuild/pull/13424 * Add review workflow by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13503 * Strengthen reviewer skill: add step-back analysis dimensions by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13504 * Add 'Request Speedometer Perf Run' to VS experimental insertion build policies by @Copilot in https://github.com/dotnet/msbuild/pull/13505 * Remove duplicate @ prefix from issueAuthor in GitOps by @akoeplinger in https://github.com/dotnet/msbuild/pull/13492 * Improve review aw by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13510 * Migrates unit tests to use RoslynCodeTaskFactory to enable running tests under .NET Core by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13500 * Fix cross-AppDomain TaskItem modifier cache regression by @DustinCampbell in https://github.com/dotnet/msbuild/pull/13493 * Discourage review agent from approving PRs by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13512 * Stop trying to deploy ValueTuple by @rainersigwald in https://github.com/dotnet/msbuild/pull/13507 * Ad-hoc re-sign bootstrap dotnet on macOS to prevent SIGKILL by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13513 * RoslynCodeTaskFactory: Log MSB3753 when task class does not implement ITask by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13517 * Update gh-aw (upon mcp policy changes) by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13526 * Eliminate XmlChildNodes allocations in GetXmlNodeInnerContents by @nareshjo in https://github.com/dotnet/msbuild/pull/13509 * Fix telemetry allocation regression: per-engine collector ownership by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13516 * Migrate to xunit.v3 by @Youssef1313 in https://github.com/dotnet/msbuild/pull/13482 * Fix stray brace in HandleBuildCancel trace string causing MSB1025 by @Copilot in https://github.com/dotnet/msbuild/pull/13535 * Bumping to 10.0.4 runtime packages by @MichalPavlik in https://github.com/dotnet/msbuild/pull/13533 * Remove early return in GetCanonicalForm, always call System.IO.Path by @OvesN in https://github.com/dotnet/msbuild/pull/13532 * Do not overwrite GetCopyToOutputDirectoryItemsDependsOn, just add new… by @snechaev in https://github.com/dotnet/msbuild/pull/13474 * Migrate GetReferenceAssemblyPaths task to TaskEnvironment API by @OvesN in https://github.com/dotnet/msbuild/pull/13495 * Stabilize ToolTaskThatTimeoutAndRetry test by @rainersigwald in https://github.com/dotnet/msbuild/pull/13489 * [automated] Merge branch 'vs18.6' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13506 * Add extra test assertions around tests by @Youssef1313 in https://github.com/dotnet/msbuild/pull/13536 * Add static eval for repo skills/agents via skill-validator by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13537 * Migrate SGen task to Task environment API by @OvesN in https://github.com/dotnet/msbuild/pull/13457 * Fix TerminalLogger assert failure for metaproj files and cached project eval ID by @OvesN in https://github.com/dotnet/msbuild/pull/13480 * Filter out approving review from pr-reviewer agent by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13553 * Use a unique task name per invocation to tabilize RoslynCodeTaskFactory_ReuseCompilation test by @huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13551 * Brief doc on feedback/logging/data systems by @rainersigwald in https://github.com/dotnet/msbuild/pull/13554 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13881982 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13437 * Stage 3: Forward BuildProjectFile* callbacks from OOP TaskHost to worker node by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13350 * Enable TaskHost Callbacks by default by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13579 * Remove unactionable info from reviewer agent by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13578 * Enlighten RequiresFramework35SP1Assembly task for multithreaded mode by @jankratochvilcz in https://github.com/dotnet/msbuild/pull/13575 * Make SdkResolver-provided environment variables take precedence over ambient environment by @Copilot in https://github.com/dotnet/msbuild/pull/12655 * Add dotnet/skills marketplace and enable plugins by @Evangelink in https://github.com/dotnet/msbuild/pull/13582 * The skills/agents check filters-in only touched files by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13586 * Fix skill-validation workflow failing when agents directory is deleted by @JeremyKuhne in https://github.com/dotnet/msbuild/pull/13592 ... (truncated) ## 18.6.3 ## What's Changed * Improve cross-platform node discovery for reuse with NodeMode filtering by @Copilot in https://github.com/dotnet/msbuild/pull/13256 * Updated common types XSD to remove errors from redefining `Include` attributes by @glektarssza in https://github.com/dotnet/msbuild/pull/13284 * Update VersionPrefix to 18.6.0 + insertion flow by @MichalPavlik in https://github.com/dotnet/msbuild/pull/13296 * Log warnings for skipped STR resource keys instead of failing the build by @OvesN in https://github.com/dotnet/msbuild/pull/13291 * Isolate MSBuildTaskHost from the rest of MSBuild Codebase by @DustinCampbell in https://github.com/dotnet/msbuild/pull/13232 * Improve error messages when ToolTask overrides exit code 0 to -1 due to logged errors by @OvesN in https://github.com/dotnet/msbuild/pull/13303 * Migrate Exec task to TaskEnvironment API by @Copilot in https://github.com/dotnet/msbuild/pull/13171 * Enhance crash telemetry with richer diagnostics and EndBuild hang detection by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13304 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13309 * [IBuildEngine callbacks] Stage 2: RequestCores/ReleaseCores by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13306 * Only get command line args names on modern .NET by @baronfel in https://github.com/dotnet/msbuild/pull/13314 * Detect and correct worker node over-provisioning by @Copilot in https://github.com/dotnet/msbuild/pull/13220 * Add App Host Support for MSBuild by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13175 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13311 * Fix ObjectDisposedException in BuildsWhileBuildIsRunningOnServer test by @Copilot in https://github.com/dotnet/msbuild/pull/13316 * Add PoC of pipelines check skill by @JanKrivanek in https://github.com/dotnet/msbuild/pull/13242 * Fix CodeSign.MissingSigningCert for xsd/Update-MSBuildXsds.ps1 by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13320 * Fix task host launch regressions from apphost support by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13325 * Enlighten GetFrameworkPath and GetFrameworkSdkPath. by @AR-May in https://github.com/dotnet/msbuild/pull/13282 * Add VMR codeflow health check to pipelines skill by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13326 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13281 * Fix GenerateResource to track all ResXFileRef linked files for incremental builds by @OvesN in https://github.com/dotnet/msbuild/pull/13327 * Add escape hatch for not sharing assemblies from tools directory by @AR-May in https://github.com/dotnet/msbuild/pull/13305 * Add merge-dependency-updates skill for bot PR triage by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13331 * Add diagnostic data to crash/hang telemetry and move null-Project check after RetrieveFromCache by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13332 * Update remote-host-object.md with SDK .tlb shipping and IDispatch example by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13324 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13341 * improve task migration skill by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13234 * Fix telemetry PII concerns: sanitize exceptions, project paths, and custom names by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13344 * Use .exe.config when loading "as full Framework" by @rainersigwald in https://github.com/dotnet/msbuild/pull/13349 * Fix RequestCores/ReleaseCores fallback in OOP TaskHost: throw NotImplementedException instead of logging error by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13345 * Fixed indentation for _GetCopyToOutputDirectoryItemsFromTransitiveProjectReferences by @CEbbinghaus in https://github.com/dotnet/msbuild/pull/13358 * Fix Unix SessionId in handshake to enable cross-terminal node reuse by @JakeRadMSFT in https://github.com/dotnet/msbuild/pull/13354 * Revert "Migrate Exec task to TaskEnvironment API" by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13367 * Look for apphost when considering node reuse by @rainersigwald in https://github.com/dotnet/msbuild/pull/13368 * Move lots of shared code to Microsoft.Build.Framework by @DustinCampbell in https://github.com/dotnet/msbuild/pull/13364 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13353 * Fix ScheduleTimeRecord.AccumulatedTime hang during solution close by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13375 * Update runtime package references to 10.0.3 by @Copilot in https://github.com/dotnet/msbuild/pull/13376 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13378 * Fix ProjectImports.zip regression from shared FileUtilities statics by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13382 * Enrich EndBuild hang diagnostics with logging service and submission state by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13385 * Enhance path normalization: add handling for consecutive directory separators by @tommcdon in https://github.com/dotnet/msbuild/pull/13369 * Move task environment drivers to Framework. by @AR-May in https://github.com/dotnet/msbuild/pull/13380 * Update MicrosoftBuildVersion in analyzer template by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13298 * Replace ProjectCacheService null Project crash with diagnostic telemetry by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13396 * Add agentic workflow to auto-close PRs older than 180 days by @Copilot in https://github.com/dotnet/msbuild/pull/13400 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13575337 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13394 * Respect MSBUILDPRESERVETOOLTEMPFILES in ProcessExit cleanup by @DmitriyShepelev in https://github.com/dotnet/msbuild/pull/13395 ... (truncated) ## 18.5.4 ## What's Changed * remove dead code by @SimaTian in https://github.com/dotnet/msbuild/pull/13125 * Update VersionPrefix to 18.5.0 + insertion flow by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13134 * add multithreaded task migration agent skill by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13131 * Update MicrosoftBuildVersion in analyzer template by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13139 * Migrate VerifyFileHash task to TaskEnvironment API by @Copilot in https://github.com/dotnet/msbuild/pull/13112 * Migrate GetFileHash tasks to TaskEnvironment API by @Copilot in https://github.com/dotnet/msbuild/pull/13111 * Diagram of VS/SDK component interactions by @rainersigwald in https://github.com/dotnet/msbuild/pull/13127 * Fix package validation telemetry assembly resolution warnings by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13144 * Adds validation to throw MSB4259 when property references contain leading or trailing whitespace outside of conditions. by @huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13076 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13203963 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13151 * Add MSBuild app host design by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12857 * Add Stabilize-Release.ps1 script for release process by @rainersigwald in https://github.com/dotnet/msbuild/pull/13146 * Fix chained item function empty result comparison in conditions by @JanProvaznik in https://github.com/dotnet/msbuild/pull/12901 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13162 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13160 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13217622 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13163 * Fix items logged as type name during -getitem argument by @Copilot in https://github.com/dotnet/msbuild/pull/13166 * Respect NetCoreSdkRoot property for TaskHostParameters by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13176 * Remove MachineIndependent configuration by @Copilot in https://github.com/dotnet/msbuild/pull/13180 * Remove redundant #nullable disable from 153 files by @Copilot in https://github.com/dotnet/msbuild/pull/13157 * Revert #13076 "Adds validation to throw MSB4259 when property references contain leading or trailing whitespace outside of conditions. by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13184 * Convert MSBuild.sln to slnx format and upate refs by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13185 * Implement IMultiThreadableTask for Move task by @Copilot in https://github.com/dotnet/msbuild/pull/13108 * Add hostservices translation support for clr 4 task host by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13154 * Handle null ProjectFile in InvalidProjectFileException by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13179 * Add $(LatestDotNetCoreForMSBuild) infrastructure for centralized framework targeting by @Copilot in https://github.com/dotnet/msbuild/pull/13189 * Fix TaskHost crash when task returns string[] with null elements by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13190 * Revert "Refactor Microsoft.IO usage" by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13194 * Allow null SdkResult from SdkResolver.Resolve by @rainersigwald in https://github.com/dotnet/msbuild/pull/13197 * Skill to test changes using just-built MSBuild by @rainersigwald in https://github.com/dotnet/msbuild/pull/13202 * Tell Copilot not to allow breaking changes by @rainersigwald in https://github.com/dotnet/msbuild/pull/13200 * Make nologo switch accept boolean values to enable explicit logo display control by @Copilot in https://github.com/dotnet/msbuild/pull/12541 * Migrate Unzip task to use TaskEnvironment API by @Copilot in https://github.com/dotnet/msbuild/pull/13109 * Migrate ZipDirectory task to TaskEnvironment API by @Copilot in https://github.com/dotnet/msbuild/pull/13110 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13246767 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13204 * Add .NET Standard compatibility warnings by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13187 * Make WriteCodeFragment task locale-independent for reproducible builds by @Copilot in https://github.com/dotnet/msbuild/pull/13192 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13249478 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13207 * Fix TerminalLogger IndexOutOfRangeException when replaying binlog with fewer nodes by @Copilot in https://github.com/dotnet/msbuild/pull/12809 * Migrate DownloadFile task to use TaskEnvironment API by @Copilot in https://github.com/dotnet/msbuild/pull/13113 * Add CI job for 2-stage build with -mt mode by @Copilot in https://github.com/dotnet/msbuild/pull/13124 * Localize AbsolutePath validation messages by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13115 * Refactor FrameworkFileUtilities for better performance by @AR-May in https://github.com/dotnet/msbuild/pull/13143 * Add agent instructions for MSBuild repository by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13198 * Add GetCanonicalForm to the AbsolutePath API by @AR-May in https://github.com/dotnet/msbuild/pull/13088 * Shouldly 4.3.0 by @rainersigwald in https://github.com/dotnet/msbuild/pull/13213 * Migrate WriteCodeFragment task to use TaskEnvironment API by @Copilot in https://github.com/dotnet/msbuild/pull/13169 * Run the issue-labeler over pull requests using polling by @Copilot in https://github.com/dotnet/msbuild/pull/13223 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13225 ... (truncated) ## 18.4.0 ## What's Changed * Fix terminal logger quiet mode to show project context for warnings/errors by @Copilot in https://github.com/dotnet/msbuild/pull/12930 * Replace OpenTelemetry with Microsoft.VisualStudio.Telemetry for VS by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12843 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13050856 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/12982 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12979 * eliminate test data serialization warnings by @JanProvaznik in https://github.com/dotnet/msbuild/pull/12983 * Add the feature flag that allows users to opt out automatic UTF8 console encoding by @GangWang01 in https://github.com/dotnet/msbuild/pull/12637 * Polyfill clean up and source package organization by @DustinCampbell in https://github.com/dotnet/msbuild/pull/12977 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13052367 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/12984 * Add documentation for enabling binlog collection via env var by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12805 * Support multiple binary logs from command line arguments by @Copilot in https://github.com/dotnet/msbuild/pull/12706 * Add VcxprojReader.exe to ngenApplications by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12986 * Add HostServices support in Out-of-Process Task Host by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12753 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13002 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13000 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13078382 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13003 * Add telemetry tracking for task factory names and runtime usage by @Copilot in https://github.com/dotnet/msbuild/pull/12989 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12987 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13079827 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13010 * Snap for VS 18.3 and update branding to VS 18.4 by @Copilot in https://github.com/dotnet/msbuild/pull/13005 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13012 * Add telemetry to categorize build failure reasons by @Copilot in https://github.com/dotnet/msbuild/pull/13007 * Update MicrosoftBuildVersion in analyzer template by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13011 * Update OptProf drop metadata configuration by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13020 * Fix MSB1025 error when using DistributedFileLogger (-dfl flag) by @Copilot in https://github.com/dotnet/msbuild/pull/13036 * CmdLine parsing was extracted from XMake and the implementation is visible to dotnet (attempt 2) by @MichalPavlik in https://github.com/dotnet/msbuild/pull/12836 * Make task environment path absolutization not throw. by @AR-May in https://github.com/dotnet/msbuild/pull/13035 * Fix flaky test TestTerminalLoggerTogetherWithOtherLoggers by @Copilot in https://github.com/dotnet/msbuild/pull/13044 * Enlighten more tasks that require no change by @AR-May in https://github.com/dotnet/msbuild/pull/13045 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13050 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13048 * Add support for MSBUILD_LOGGING_ARGS by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12993 * Fix MSBuildEventSource by @dfederm in https://github.com/dotnet/msbuild/pull/13030 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13124182 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13053 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13031 * Add incrementality tracking support and more detailed analysis of the build errors reported by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13057 * [automated] Merge branch 'vs18.3' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13055 * Enable com support for clr4 in task host by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13033 * Add 'rel/d18.3' to insertion target branch options by @ViktorHofer in https://github.com/dotnet/msbuild/pull/13067 * add OriginalValue property to AbsolutePath by @JanProvaznik in https://github.com/dotnet/msbuild/pull/13077 * [automated] Merge branch 'vs18.3' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/13074 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13137486 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13075 * Refactor FileUtilities.cs and add methods for absolute paths. by @AR-May in https://github.com/dotnet/msbuild/pull/13079 * Limit extended flag usage to NET and CLR4 runtimes by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13080 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13065 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13137926 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/13081 * Update to 10.0.1 references by @rainersigwald in https://github.com/dotnet/msbuild/pull/13072 * Undo COM support in out of proc task host CLR4 by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/13089 * Add Managed Identity for bootstrapper creation by @rainersigwald in https://github.com/dotnet/msbuild/pull/13092 * Add warning MSB4280 when DOTNET_HOST_PATH is set to a directory by @Copilot in https://github.com/dotnet/msbuild/pull/13091 ... (truncated) ## 18.3.3 ## What's Changed * Streamline BuildGlobResultFromIncludeItem by @Erarndt in https://github.com/dotnet/msbuild/pull/12178 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12576 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12573 * Add new project telemetry to telemetry documentation by @AR-May in https://github.com/dotnet/msbuild/pull/12565 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12574 * [main] Source code updates from dotnet/dotnet by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12564 * Add 17.14->18.0->main automerges by @rainersigwald in https://github.com/dotnet/msbuild/pull/12567 * Perf: Reimplement Lookup.Scope tables without ItemDictionary by @ccastanedaucf in https://github.com/dotnet/msbuild/pull/12320 * Report line number in app.config error by @rainersigwald in https://github.com/dotnet/msbuild/pull/12535 * Use Builder in ImmutableDictionary.SetItems extension by @ccastanedaucf in https://github.com/dotnet/msbuild/pull/12402 * Thread-Safe Tasks spec by @AR-May in https://github.com/dotnet/msbuild/pull/12111 * Branding for 18.1 by @AR-May in https://github.com/dotnet/msbuild/pull/12586 * Fix Copy task case sensitivity issue on Unix systems by @Copilot in https://github.com/dotnet/msbuild/pull/12147 * Add null check for environmentVariableProperties by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12594 * Clarify property tracking capabilities in documentation by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12600 * enable out of process execution of inline tasks by @JanProvaznik in https://github.com/dotnet/msbuild/pull/11948 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12605 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12604 * [automated] Merge branch 'vs18.0' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/12592 * Remove outdated logging + fix the test by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/12607 * Move version label next to version prefix by @AR-May in https://github.com/dotnet/msbuild/pull/12609 * Perf: Avoid unnecessary ProjectMetadataInstance allocations by @ccastanedaucf in https://github.com/dotnet/msbuild/pull/12599 * Allow NodeProviderOutOfProcTaskHost to manage multiple nodes instead of one per arch by @surayya-MS in https://github.com/dotnet/msbuild/pull/12577 * Systematically use FileSystems abstraction instead of BCL file operations by @Copilot in https://github.com/dotnet/msbuild/pull/12602 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 12531490 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/12613 * Enable code coverage for Linux/Mac by @fhnaseer in https://github.com/dotnet/msbuild/pull/11920 * Fix the crash when doing preprocess by @GangWang01 in https://github.com/dotnet/msbuild/pull/12396 * Track subclasses of MSBuild tasks for telemetry by @Copilot in https://github.com/dotnet/msbuild/pull/12623 * Update localization comment for main by @AR-May in https://github.com/dotnet/msbuild/pull/12618 * Perf: Use struct for WorkUnitResult by @ccastanedaucf in https://github.com/dotnet/msbuild/pull/12403 * Revert "Smaller thread stack size for copy threads" by @JanProvaznik in https://github.com/dotnet/msbuild/pull/12626 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 12551716 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/12628 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 12558527 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/12629 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12635 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12634 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 12567344 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/12633 * allow a parameter to disable the live-updating nodes display by @baronfel in https://github.com/dotnet/msbuild/pull/12581 * Drafts of build scenario and persistent-problems docs by @rainersigwald in https://github.com/dotnet/msbuild/pull/11002 * Lookup.ExplicitModifications switch to concrete dictionary type for enumerator. by @ttstanley in https://github.com/dotnet/msbuild/pull/11985 * Add new multithreaded APIs by @AR-May in https://github.com/dotnet/msbuild/pull/12625 * /mt implies inline task factories out of proc by @JanProvaznik in https://github.com/dotnet/msbuild/pull/12614 * Fix bug with not passing scheduled node id to the task host task by @AR-May in https://github.com/dotnet/msbuild/pull/12639 * Remove audit sources from NuGet.config by @akoeplinger in https://github.com/dotnet/msbuild/pull/12641 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12673 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/12674 * Update codeflow metadata to fix backflow by @premun in https://github.com/dotnet/msbuild/pull/12678 * Optimize for single capture case by @Erarndt in https://github.com/dotnet/msbuild/pull/12569 * [automated] Merge branch 'vs18.0' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/12685 * Multithreaded task routing by @JanProvaznik in https://github.com/dotnet/msbuild/pull/12617 ... (truncated) ## 18.0.2 ## What's Changed * asking terminal for dimensions during every frame is expensive by @SimaTian in https://github.com/dotnet/msbuild/pull/11504 * Fix the head parameter when search the created PRs by @JaynieBai in https://github.com/dotnet/msbuild/pull/11569 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11552 * Fix test to take warning MSB5018 by @JaynieBai in https://github.com/dotnet/msbuild/pull/11499 * Update tsa config by @AR-May in https://github.com/dotnet/msbuild/pull/11578 * Switch to AwesomeAssertions by @rainersigwald in https://github.com/dotnet/msbuild/pull/11577 * Update MicrosoftBuildVersion in analyzer template by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/11581 * Update branding to 17.15 by @maridematte in https://github.com/dotnet/msbuild/pull/11582 * using virtual fuction instead of reflection by @SimaTian in https://github.com/dotnet/msbuild/pull/11513 * Address some low-hanging fruit to use newer/better .NET features by @stephentoub in https://github.com/dotnet/msbuild/pull/11448 * Delete .exp-insertions.yml by @JanProvaznik in https://github.com/dotnet/msbuild/pull/11601 * Microsoft.Common.CurrentVersion.targets: _SplitProjectReferencesByFileExistence DependsOn AssignProjectConfiguration by @vikukush in https://github.com/dotnet/msbuild/pull/11167 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11600 * [main] Update dependencies from dotnet/arcade by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11587 * Add null check when iterating through TargetOutputs in terminal logger by @mruxmohan4 in https://github.com/dotnet/msbuild/pull/11606 * [automated] Merge branch 'vs17.14' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/11572 * Assert instead of ! for nullable by @rainersigwald in https://github.com/dotnet/msbuild/pull/11545 * Consolidate common IPC / named pipe code by @ccastanedaucf in https://github.com/dotnet/msbuild/pull/11546 * [main] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11592 * Update maintenance-packages versions by @carlossanlop in https://github.com/dotnet/msbuild/pull/11457 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11615 * Update MicrosoftBuildVersion in analyzer template by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/11590 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 11273384 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/11608 * Don't force shipping versions to be used in VMR builds by @jkoritzinsky in https://github.com/dotnet/msbuild/pull/11625 * Fix url formatting in BuildCheck/Codes.md by @MaceWindu in https://github.com/dotnet/msbuild/pull/11631 * `/documentation/specs/*.md` formatting/linting/cleanup by @BenjaminBrienen in https://github.com/dotnet/msbuild/pull/11611 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 11285593 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/11639 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11599 * add telemetry e2e test, address code quality issues by @JanProvaznik in https://github.com/dotnet/msbuild/pull/11602 * Remove MSBuildRuntimeType conditions by @ViktorHofer in https://github.com/dotnet/msbuild/pull/11641 * Set IDE0005 (Remove unnecessary using directives) severity to Warning by @JaynieBai in https://github.com/dotnet/msbuild/pull/11643 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11646 * Remove RichCodeNavIndexer from .vsts-dotnet-ci.yml by @akoeplinger in https://github.com/dotnet/msbuild/pull/11647 * [REVERT] 11546 refactor common pipe code by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/11648 * [automated] Merge branch 'vs17.14' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/11651 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11645 * Implement ExecCliBuild build check to warn if the Exec task is used to build a project by @IliaShuliatikov in https://github.com/dotnet/msbuild/pull/11523 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 11312841 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/11653 * Improve TargetFrameworkConfusionCheck by @stan-sz in https://github.com/dotnet/msbuild/pull/11656 * [automated] Merge branch 'vs17.14' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/11664 * VS Telemetry design documentation by @JanProvaznik in https://github.com/dotnet/msbuild/pull/11175 * [automated] Merge branch 'vs17.14' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/11667 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 11332988 by @dotnet-bot in https://github.com/dotnet/msbuild/pull/11675 * [main] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11685 * [automated] Merge branch 'vs17.14' => 'main' by @github-actions[bot] in https://github.com/dotnet/msbuild/pull/11682 * Add separate DeserializePacket() to INodePacketFactory by @ccastanedaucf in https://github.com/dotnet/msbuild/pull/11650 * [main] Update dependencies from dotnet/roslyn by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11695 * Update BuildCheck code BC0109 -> BC0302 by @YuliiaKovalova in https://github.com/dotnet/msbuild/pull/11696 * [main] Update dependencies from nuget/nuget.client by @dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/11689 ... (truncated) Commits viewable in [compare view](https://github.com/dotnet/msbuild/compare/v17.14.28...v18.11.0). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Summary
Adds support for using AbsolutePath, System.IO.FileInfo, System.IO.DirectoryInfo, and ITaskItem (for path-like T) as MSBuild task input/output parameters, in addition to the existing string and ITaskItem types.
Changes
ITaskItem<T>: A new generic interface allowing typed access to item specs, with T restricted to AbsolutePath, FileInfo, or DirectoryInfo in this PRTaskItem<T>: Implementation of ITaskItem with mutable metadata backingPerformance
A BenchmarkDotNet benchmark (
TaskParameterBindingBenchmark) was added that drives the realTaskExecutionHost.SetTaskParameterspath to measure the engine's per-parameter binding overhead for the new types against thestringandITaskItembaselines.Steady-state full-run results (AMD Ryzen 7 5700X3D, BDN v0.13.12), with the
ITaskItem<T>constructor-delegate caching applied.Meanis per single parameter bind;Allocatedis managed bytes per bind; ratios are vs thestringbaseline.net10.0 (.NET 10.0.8)
string(baseline)ITaskItemAbsolutePathFileInfoDirectoryInfoITaskItem<AbsolutePath>ITaskItem<FileInfo>ITaskItem<DirectoryInfo>net472 (.NET Framework 4.7.2)
string(baseline)ITaskItemAbsolutePathFileInfoDirectoryInfoITaskItem<AbsolutePath>ITaskItem<FileInfo>ITaskItem<DirectoryInfo>Takeaways:
AbsolutePath,FileInfo,DirectoryInfo) add only ~10–90% over a plainstringbind — roughly a microsecond per parameter and ~0.8–1.2 KB / ~0.9–1.1 KB extra allocation, negligible against real task execution.ITaskItem<T>path was the expensive case because the engine wrapped each item viatypeof(TaskItem<>).MakeGenericType(...).GetConstructor(...).Invoke(...)on every bind. This PR now caches a compiledFunc<ITaskItem, ITaskItem>constructor delegate per generic argument T, so the reflection work happens once. On .NET Framework this cutITaskItem<T>bind time by ~37–42% (e.g. ~24 µs → ~14–15 µs) and trimmed ~180 B/bind; on .NET 10 the JIT already optimized the reflection well, so the win there is primarily reduced allocations and Gen0 churn (≈3.1 KB → ≈2.9 KB).Stacked on
/cc @baronfel