msbuild icon indicating copy to clipboard operation
msbuild copied to clipboard

[Feature Request]: Expand $(~) to $(HOME) or $(USERPROFILE) depending on OS

Open kzu opened this issue 1 year ago • 4 comments

Summary

Currently, you need to do something like the following to consistently get the ~ home directory in a cross-platform way:

<PropertyGroup>
    <UserProfileHome Condition="'$([MSBuild]::IsOSUnixLike())' == 'true'">$(HOME)</UserProfileHome>
    <UserProfileHome Condition="'$([MSBuild]::IsOSUnixLike())' != 'true'">$(USERPROFILE)</UserProfileHome>
</PropertyGroup>

It would be awesome if the well-known shorthand ~ (even PowerShell Core knows it) could be used directly in MSBuild as a built-in envvar alias for either $(HOME) or $(USERPROFILE) depending on the current OS, just like pwsh does it.

Background and Motivation

No particular problem, just a desire for more consistency across developer tooling in the ecosystem (following the lead from pwsh).

Proposed Feature

Summary contains the proposal, which would be to consider ~ as an alias to either Home or UserProfile envvar names in Unix-like vs Windows.

Alternative Designs

No response

kzu avatar May 21 '24 00:05 kzu

Or MsbuildHomeDir ?

danmoseley avatar May 21 '24 03:05 danmoseley

Team triage: @baronfel what do you think of this suggestion?

AR-May avatar May 21 '24 13:05 AR-May

It seems reasonable to me, but we should check for consistency with the Runtime's SpecialFolders enum in addition to various popular shells like bash, zsh, fish, and pwsh.

baronfel avatar May 21 '24 13:05 baronfel

@danmoseley that would be confusing, since it might mean the MSBuild home dir (i.e. where msbuild.exe lives).

kzu avatar May 21 '24 21:05 kzu