dotnet / dotnet/arcade

Remove the AbsolutePath.GetCanonicalForm polyfill once Arcade consumes an MSBuild with the public API

Open Beginner friendly
#17,506 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
729
Forks
397
Avg merge
3d 15m
Merged PRs (30d)
149

Description

`AbsolutePath.GetCanonicalForm()` is `internal` in the MSBuild packages Arcade currently consumes (verified: CS1061 against both the pinned 18.8.2 and the latest stable 18.9.6). It is public in `dotnet/msbuild` `main` (dotnet/msbuild#13711, closed 2026-08-31) but has not shipped yet.

`TaskEnvironment.GetAbsolutePath` deliberately absolutizes without canonicalizing, so migrated tasks that previously used `Path.GetFullPath` need the canonicalization step back wherever a path is compared, deduplicated, or emitted. Until the API is available, `src/Common/Internal/AbsolutePathExtensions.cs` polyfills it as an extension method.

When Arcade moves to an MSBuild package that exposes the API (18.12 or newer):

- Delete `src/Common/Internal/AbsolutePathExtensions.cs` and its `` links.
- Remove the accompanying `#pragma warning disable` for the banned `Path.GetFullPath` call, if one was needed.

The swap is source compatible: the real instance method takes precedence over the extension method, so call sites keep compiling either way.

Contributor guide

Open the contributing guide

Research direction

Wait until Arcade consumes an MSBuild package exposing the public API, then inspect src/Common/Internal/AbsolutePathExtensions.cs and search for its Compile Include links. Remove the polyfill and any associated Path.GetFullPath warning suppression, then verify the affected projects still compile with the newer package.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
build-system
Issue type
Refactor
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
65/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.