Skip to content

Conversation

@ShikiSuen
Copy link

@ShikiSuen ShikiSuen commented Apr 17, 2025

Summary

Target Branch: swiftlang:main

This PR replaces manual LocalAppData path construction with the Windows Shell API SHGetKnownFolderPath to reliably obtain the correct per-user local application data directory.

Problem

On Windows, the environment variable USERPROFILE is not guaranteed to equal %SYSTEMDRIVE%\Users\%USERNAME%. When the manually constructed LocalAppData path does not exist, UserDefaults writes silently no-op, causing preferences to never persist.

Solution

Use SHGetKnownFolderPath(&FOLDERID_LocalAppData, ...) to programmatically retrieve the correct LocalAppData path instead of building it from environment variables or string concatenation.


Changes

  • Replace hand-built LocalAppData path construction with SHGetKnownFolderPath API call
  • Add #include <shlobj_core.h> for the Shell API
  • Use CoTaskMemFree to properly release the pointer returned by SHGetKnownFolderPath
  • Tighten control flow for _kCFKnownLocationUserCurrent to prevent unintended fallthrough after successful username lookup

Scope

Aspect Details
Platform Windows only (TARGET_OS_WIN32)
Files Changed Sources/CoreFoundation/CFKnownLocations.c
Public API No changes
Other Platforms Unaffected

Risk Assessment

Severity: Low to Moderate (Windows-only)

Low Risk

  • No public API changes
  • Uses a well-documented Windows API to find the current user's LocalAppData
  • Reduces failure modes from incorrect path assumptions

Moderate Risk

  • ByName Path Lookup: The previous implementation could potentially derive a LocalAppData path for users other than the current user (via GetProfilesDirectoryW + username). The new approach uses SHGetKnownFolderPath, which returns the path for the current user context only. If support for other-user preference paths (CFKnownLocationUserByName) on Windows is required, an alternative approach (e.g., SID impersonation or GetProfilesDirectoryW) may be needed.

Build/Link Considerations

  • Requires shlobj_core.h header and linking to ole32 or shell32 libraries
  • Verify build system provides these dependencies for Windows targets

Runtime Considerations

  • SHGetKnownFolderPath is available on Windows Vista and later. Swift targets higher WinNT builds, hence no worries.
  • Memory is correctly managed using CoTaskMemFree

References

This approach is consistent with how .NET runtime handles LocalAppData path retrieval on Windows:


Testing

TO BE FILLED IN


Reviewers

TO BE FILLED IN

@ShikiSuen
Copy link
Author

cc @compnerd Could you please take a look at this PR to see whether there are anything else to fix?

@ShikiSuen
Copy link
Author

Could anyone please review this?

Copy link
Member

@compnerd compnerd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry about the delay. This looks good to me!

@compnerd
Copy link
Member

compnerd commented Jun 2, 2025

@swift-ci please test

@compnerd
Copy link
Member

compnerd commented Jun 2, 2025

11:32:19  /home/build-user/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/tests/test-foundation-package/Output/test-foundation-networking-static-stdlib.test.tmp/test-foundation-networking | /home/build-user/build/buildbot_linux/llvm-linux-x86_64/bin/FileCheck /home/build-user/swift-integration-tests/test-foundation-package/test-foundation-networking-static-stdlib.test
11:32:19  # executed command: /home/build-user/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/tests/test-foundation-package/Output/test-foundation-networking-static-stdlib.test.tmp/test-foundation-networking
11:32:19  # .---command stderr------------
11:32:19  # | generic witness table at 0x55f2db72de98 contains out-of-bounds requirement descriptor 0x11
11:32:19  # `-----------------------------
11:32:19  # error: command failed with exit status: -6

This seems unlikely to be related ... @slavapestov any idea what this might be about?

@compnerd
Copy link
Member

compnerd commented Jun 5, 2025

@swift-ci please test

@ShikiSuen
Copy link
Author

Could anyone please take a look at this PR to see what is going on?

@ShikiSuen
Copy link
Author

Swift 6.2 is released for months and this PR is till gets ignored.
cc @compnerd for attention.

@compnerd
Copy link
Member

compnerd commented Dec 1, 2025

@swift-ci please test

@compnerd
Copy link
Member

compnerd commented Dec 1, 2025

@ShikiSuen I think that we just need to get this through the CI systems, but this should be good to go otherwise. Please create a new PR with the same changes for the release/6.3 branch

@compnerd compnerd changed the title [Continued] Use SHGetKnownFolderPath to get path to localappdata for current user Windows: Use SHGetKnownFolderPath to compute LocalAppData Dec 1, 2025
@brianmichel
Copy link

Oh @ShikiSuen we'd love to use this! Thank you for the fix, can't wait to see it in 6.3!

@compnerd
Copy link
Member

compnerd commented Dec 1, 2025

@swift-ci please test Windows platform

@ShikiSuen ShikiSuen changed the base branch from main to release/6.3 December 2, 2025 03:11
@ShikiSuen
Copy link
Author

@ShikiSuen I think that we just need to get this through the CI systems, but this should be good to go otherwise. Please create a new PR with the same changes for the release/6.3 branch

I've modified this PR targeting release/6.3 branch now.

Oh @ShikiSuen we'd love to use this! Thank you for the fix, can't wait to see it in 6.3!

I've modified this PR targeting release/6.3 branch now.

@compnerd
Copy link
Member

compnerd commented Dec 2, 2025

@ShikiSuen no, that won't work - this must go to main first. We want a cherry-pick for 6.3

@ShikiSuen ShikiSuen force-pushed the SHGetKnownFolderPath-Continued branch from 4750898 to e71d604 Compare December 2, 2025 03:44
@ShikiSuen ShikiSuen changed the base branch from release/6.3 to main December 2, 2025 03:47
@compnerd
Copy link
Member

compnerd commented Dec 2, 2025

@swift-ci please test

@ShikiSuen ShikiSuen force-pushed the SHGetKnownFolderPath-Continued branch from e71d604 to 56a4e3f Compare December 2, 2025 03:50
@ShikiSuen
Copy link
Author

ShikiSuen commented Dec 2, 2025

@compnerd The current PR (5201) is now rebased using and targeting the main branch.

(PR 5295 I pushed just now is targeting the 6.0.3 branch.)

@ShikiSuen ShikiSuen changed the title Windows: Use SHGetKnownFolderPath to compute LocalAppData Windows: Use SHGetKnownFolderPath to compute LocalAppData. (targeting main). Dec 2, 2025
@compnerd
Copy link
Member

compnerd commented Dec 2, 2025

@swift-ci please test

@compnerd
Copy link
Member

compnerd commented Dec 2, 2025

@swift-ci please test Windows platform

@compnerd
Copy link
Member

compnerd commented Dec 2, 2025

@ShikiSuen this might require more work - it seems that the tests are failing due to an abnormal termination with this change.

@compnerd compnerd changed the title Windows: Use SHGetKnownFolderPath to compute LocalAppData. (targeting main). Windows: Use SHGetKnownFolderPath to compute LocalAppData Dec 2, 2025
@ShikiSuen
Copy link
Author

ShikiSuen commented Dec 2, 2025

@compnerd I saw the test on WinNT is still running:
https://ci-external.swift.org/job/swift-corelibs-foundation-PR-windows/800/consoleFull

I searched keyword CFKnownLocations. throughout the current log stream and didn't find anything failed.

image

@compnerd
Copy link
Member

compnerd commented Dec 2, 2025

@compnerd I saw the test on WinNT is still running: https://ci-external.swift.org/job/swift-corelibs-foundation-PR-windows/800/consoleFull

I searched keyword CFKnownLocations. throughout the current log stream and didn't find anything failed.

I re-triggered the tests, so the link is gone. The search result is not important - the fact that the test process terminated abnormally is. That means that there is an invalid memory access or assertion being triggered now.

@ShikiSuen
Copy link
Author

@compnerd I need to know which assertion in which file fails the unit tests.
Any crash report will help.

P.S.: I'm not familiar with Win32 development. However, I personally suggest that CI for PRs should do A/B tests consecutively to identify whether a CI failure really is caused by the contents of the PR. Also, if it fail, it'd better to be a repeatable failure. Still, to my experience, network dependencies, if have, can fail CI unit tests reandomly.

@compnerd
Copy link
Member

compnerd commented Dec 2, 2025

Unfortunately, SPM doesn't always report that. You would need to try to see if you can reproduce the issue locally.

@ShikiSuen
Copy link
Author

@compnerd Are unit test cases in CI run sequencially or in parallel?


Let me note some intelligence collected from the failed checks:

Test Case 'TestNSLocale.test_staticProperties' started at 2025-12-02 19:11:18.892

Error: Error: swift exited with code 1.
Invocation:
  swift test --scratch-path T:\x86_64-unknown-windows-msvc\FoundationTests --package-path C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift-corelibs-foundation -c debug -debug-info-format none --multiroot-data-file C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build_swift\resources\SwiftPM-Unified-Build.xcworkspace --test-product swift-corelibs-foundationPackageTests
Call stack:
  at Invoke-Program, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1075
  at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 2055
  at Invoke-IsolatingEnvVars, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1094
  at Build-SPMProject, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 2020
  at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 3186
  at Invoke-IsolatingEnvVars, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1094
  at Test-Foundation, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 3178
  at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 855
  at Record-OperationTime, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 671
  at Invoke-BuildStep, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 854
  at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 4510

    at Invoke-Program, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1079
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 2055
    at Invoke-IsolatingEnvVars, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1094
    at Build-SPMProject, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 2020
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 3186
    at Invoke-IsolatingEnvVars, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1094
    at Test-Foundation, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 3178
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 855
    at Record-OperationTime, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 671
    at Invoke-BuildStep, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 854
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 4510
  From System.Management.Automation.RuntimeException: Error: swift exited with code 1.
  Invocation:
    swift test --scratch-path T:\x86_64-unknown-windows-msvc\FoundationTests --package-path C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift-corelibs-foundation -c debug -debug-info-format none --multiroot-data-file C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build_swift\resources\SwiftPM-Unified-Build.xcworkspace --test-product swift-corelibs-foundationPackageTests
  Call stack:
    at Invoke-Program, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1075
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 2055
    at Invoke-IsolatingEnvVars, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1094
    at Build-SPMProject, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 2020
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 3186
    at Invoke-IsolatingEnvVars, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 1094
    at Test-Foundation, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 3178
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 855
    at Record-OperationTime, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 671
    at Invoke-BuildStep, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 854
    at <ScriptBlock>, C:\Users\swift-ci\jenkins\workspace\swift-corelibs-foundation-PR-windows\swift\utils\build.ps1: line 4510

@ShikiSuen
Copy link
Author

@compnerd By the way: This PR at this moment added #include <shlobj_core.h> to CFKnownLocations.c. Should there be any extra work to do with this? I guess this might be the prime cause why the CI fails.

@ShikiSuen
Copy link
Author

@swift-ci Please test Windows platform.

@compnerd
Copy link
Member

compnerd commented Dec 3, 2025

@swift-ci please test windows platform

@compnerd
Copy link
Member

compnerd commented Dec 3, 2025

@swift-ci please test Windows platform

@ShikiSuen
Copy link
Author

Regarding the following CI log:
https://ci-external.swift.org/job/swift-corelibs-foundation-PR-windows/808/consoleFull
I've sent it to Raptor (via VSCode) for an analysis. Here's its report:


CI Failure Analysis — Windows (WinNT) Build

TL;DR ✅

This PR (branch: SHIKI-PR603/SHGetKnownFolderPath) did not introduce the failing Windows CI test. The failing test originates from LLDB tests and not from Foundation changes in CFKnownLocations.c. The failing test is:

  • lldb-api :: commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py
    • Failing test: test_launch_with_unusual_process_name
    • Error message: "Cannot launch '.../a.out': Error 31"
    • Crash info: lldb-server exited with an exception (Exception Code: 0xC0000005, access violation)

I recommend re-running the CI (to rule out flake) and investigating LLDB's launchgdbserver test failures independently (LLDB/llvm project). Below are the details and suggested next steps.


What I checked 🛠️

  • Reviewed the CI log file: CI-FailLog-WinNT.txt and searched for failure markers (FAIL, FAILED, Exception, Error, FAILED TEST).
  • Confirmed the failing test and failure cause are in LLVM/LLDB tests (not Foundation tests).
  • Located related Foundation/Windows code touched by the PR: Sources/CoreFoundation/CFKnownLocations.c (use of SHGetKnownFolderPath for LocalAppData), which is unrelated to LLDB's launchgdbserver logic.

Evidence from CI log (excerpts)

  • Failing test summary:
FAIL: lldb-api :: commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py (317 of 2494)
******************** TEST 'lldb-api :: commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py' FAILED ********************
  • Specific failing test and message:
FAIL: test_launch_with_unusual_process_name (TestPlatformLaunchGDBServer.TestPlatformProcessLaunchGDBServer)
Error output:
error: Cannot launch 'T:/5/lldb-test-build.noindex/commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.test_launch_with_unusual_process_name/wd/a.out': Error 31

lldb-server exiting...
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Exception Code: 0xC0000005
  • Final build status returned by CI:
Failed Tests (1):
  lldb-api :: commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py

FAILED: tools/lldb/test/CMakeFiles/check-lldb T:/5/tools/lldb/test/CMakeFiles/check-lldb
ninja: build stopped: subcommand failed.
Error: cmake.exe exited with code 1.
Finished: FAILURE
  • Foundation code changed in this PR (for context): Sources/CoreFoundation/CFKnownLocations.c — uses SHGetKnownFolderPath(&FOLDERID_LocalAppData, ...) on Windows to derive user local paths.

Why I believe this is unrelated to the PR 🧭

  • The failing test is in LLDB's test suite. There is no coupling between CFKnownLocations and LLDB's process launching logic that would cause an LLDB process to fail at launch.
  • The crash is an access violation (0xC0000005) in lldb-server while trying to launch a test a.out binary. That’s likely a LLDB or toolchain issue.
  • Error 31 suggests an OS-level launch/permission/requirement issue (not a Foundation API failure). LLDB attempts to run a.out, which is not a typical Windows executable filename — perhaps the test expects Linux-specific behaviors.
  • CI log shows this is an LLDB test failure and FAILED: tools/lldb/test/CMakeFiles/check-lldb stops the build.

Given these points, this failure is not introduced by changes to CFKnownLocations.c or other Foundation sources in this PR.


Suggested next steps / reproduction steps 🔁

If you want to confirm or gather more debugging data, here’s what you can do:

  1. Re-run the Windows CI job (first step — rule out intermittent flakiness).

  2. Run the failing LLDB test locally or on a Windows VM (reproduce):

# Example using dotest.py from llvm's test runner
python $LLVM_PROJECT_ROOT/lldb/test/API/dotest.py -v -p TestPlatformLaunchGDBServer.py -k test_launch_with_unusual_process_name --build-dir <LOCAL_BUILD_DIR> --arch x86_64 --executable <lldb_exe> --compiler <clang_exe>
  1. Run the full test target locally to capture more output and backtrace:
cd <build-dir>
cmake --build . --target check-lldb
# or invoke the dotest.py as used by CI, with the same environment variables shown in CI log
  1. If reproducible, try running the test under a debugger or collect a Windows minidump to provide a traceback to LLDB maintainers.

Suggested reporting for LLDB (if issue persists) 🐛

If the LLDB test fails consistently, please file an issue to LLVM/LLDB (https://github.com/llvm/llvm-project/issues/) and include:

  • The failing test name and script path: llvm-project/lldb/test/API/commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py
  • The failing test function: test_launch_with_unusual_process_name
  • Exact CI command and environment used (copy from the CI log). Example:
    • dotest.py invocation used in CI
    • Tools / versions: lldb 21.1.6, Swift 6.3-dev, MSVC, Windows Server 2019
  • The error message and the exception code (0xC0000005) and Error 31 output
  • A reproduction test run or logs with the environment variables, stack trace, and dump files if possible

Quick summary to maintainers 📨

  • The Windows CI failure is from an LLDB test (TestPlatformLaunchGDBServer) — not from Foundation.
  • PR SHIKI-PR603/SHGetKnownFolderPath modifies CFKnownLocations.c (Windows path logic) and does not influence LLDB (launchgdbserver) behavior.
  • I recommend re-running CI, then pursuing debug of LLDB’s failing test (LLDB or toolchain issue) if it persists.

If you want, I can also prepare a draft of the issue to open against LLVM/LLDB with the logs and reproduction steps included.

Thanks — let me know if you want this file updated to include additional log excerpts or a screenshot of the CI failure details.

@ShikiSuen
Copy link
Author

@compnerd I started another PR ( #5297 ) which is derived from the current PR (#5201) but has all code-changes removed:
#5297

Let's see whether #5297 fails or not. If #5297 fails in the same way, then the current PR (#5201) is irrelated to this CI failure.

@compnerd
Copy link
Member

compnerd commented Dec 4, 2025

Triggered the build, but it will pass. foundation is being built and tested for each swift PR.

@ShikiSuen
Copy link
Author

@compnerd Not always. The timestamp matters. That's why I said A/B tests for a PR is necessary. The current CI testing system only tests post-PR results. This hinders us from knowing whether the test pipeline works well at the time when the PR was committed.

Let's see how the results of PR#5297 will be.

@ShikiSuen
Copy link
Author

@compnerd
Copy link
Member

compnerd commented Dec 4, 2025

@compnerd #5297 Windows test failed: https://ci-external.swift.org/job/swift-corelibs-foundation-PR-windows/809/consoleFull

No, that is a flake - that was LLDB tests

@compnerd
Copy link
Member

compnerd commented Dec 5, 2025

https://ci-external.swift.org/job/swift-corelibs-foundation-PR-windows/810/ indicates that the tests are in fact passing as I had previously stated.

@ShikiSuen
Copy link
Author

@swift-ci Please test Windows platform.

@compnerd
Copy link
Member

compnerd commented Dec 5, 2025

This patch is incorrect. I do not feel comfortable with this change due to the use of the AI tools as there isn't clear policy around that yet.

@ShikiSuen
Copy link
Author

@compnerd Is this repo compilable on ARM64 Windows?

The CI takes way too many hours (probably days) to get a result. Unfortunately, I only have a M4 mac mini to run all these code stuffs. My only Windows machine is a Gigabyte Brix Game UHD which CPU is i7-6700HQ... might be too weak for compiling this kind of project.

@ShikiSuen ShikiSuen marked this pull request as draft December 6, 2025 13:25
@ShikiSuen ShikiSuen force-pushed the SHGetKnownFolderPath-Continued branch from eedcd7a to 14cd1c3 Compare December 6, 2025 13:26
@ShikiSuen
Copy link
Author

I removed those commits generated by CfCCAgent and rebased to let this PR inherit recent changes from the merging target.

Lemme draft this PR for now. Gonna see whether we can align the behavior to what dotNET 10 does.

@ShikiSuen
Copy link
Author

@compnerd I pushed a refactor commit to let the concerned block aligning to dotNET 10.

Here are the references:

https://github.com/dotnet/dotnet/blob/0dcb6ee24ca4d7c959ee55e09abc34c727799fb0/src/runtime/src/libraries/System.Private.CoreLib/src/System/Environment.Win32.cs#L225-L243

https://github.com/dotnet/dotnet/blob/0dcb6ee24ca4d7c959ee55e09abc34c727799fb0/src/runtime/src/libraries/Common/src/Interop/Windows/Shell32/Interop.SHGetKnownFolderPath.cs#L170-L183

https://github.com/dotnet/dotnet/blob/0dcb6ee24ca4d7c959ee55e09abc34c727799fb0/src/msbuild/src/Build.UnitTests/Evaluation/Evaluator_Tests.cs#L2688-L2728

@ShikiSuen ShikiSuen force-pushed the SHGetKnownFolderPath-Continued branch from 60dc9fd to 2684bfe Compare December 6, 2025 13:50
@ShikiSuen
Copy link
Author

ShikiSuen commented Dec 6, 2025

(I intentionally squashed all commits and removed @stevenbrix 's credit. Reason: This PR now uses the behavior of dotNET 10 instead.)

@ShikiSuen ShikiSuen marked this pull request as ready for review December 6, 2025 13:51
@ShikiSuen ShikiSuen requested a review from compnerd December 6, 2025 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants