Skip to content

Commit 5e24077

Browse files
nagilsongithub-actions
authored andcommitted
Set sdk.txt file to enable preview SDKs
- VS uses the local appdata, VS versioned folder, sdk.txt file to determine whether or not to accept preview sdks - VS Release rejects preview SDKs by default which causes the msbuild sdk resolver to not find sdks, as msbuild respects the vs settings - This changes the vs settings to enable our internal SDKs to be found by msbuild when it's going under test. - Possible improvements: this PR assumes sdk.txt content ordering does not matter - based on VS code this appears to be true but could change in the future Also tried: - modifying global.json to enable preview sdks, which was not enough. some tests have a custom global.json and it seems to not take precedence setting env vars such as msbuildsdks which did not take precedence over the vs setting This commit is a condensed version of the work done in #51591 and #51598
1 parent 0686242 commit 5e24077

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

build/RunTestsOnHelix.cmd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ set PATH=%DOTNET_ROOT%;%PATH%
1010
set DOTNET_MULTILEVEL_LOOKUP=0
1111
set TestFullMSBuild=%1
1212

13+
REM Ensure Visual Studio instances allow preview SDKs
14+
PowerShell -ExecutionPolicy ByPass -NoProfile -File "%HELIX_CORRELATION_PAYLOAD%\t\eng\enable-preview-sdks.ps1"
15+
1316
REM Use powershell to call partical Arcade logic to get full framework msbuild path and assign it
1417
if "%TestFullMSBuild%"=="true" (
1518
FOR /F "tokens=*" %%g IN ('PowerShell -ExecutionPolicy ByPass -File "%HELIX_CORRELATION_PAYLOAD%\t\eng\print-full-msbuild-path.ps1"') do (SET DOTNET_SDK_TEST_MSBUILD_PATH=%%g)

eng/enable-preview-sdks.ps1

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
param()
2+
3+
. $PSScriptRoot\common\tools.ps1
4+
5+
try {
6+
$vsInfo = LocateVisualStudio
7+
}
8+
catch {
9+
Write-Host "LocateVisualStudio failed: $_"
10+
return
11+
}
12+
13+
if ($null -eq $vsInfo) {
14+
Write-Host "No Visual Studio instance detected; preview SDKs remain enabled by default."
15+
return
16+
}
17+
18+
$vsId = $vsInfo.instanceId
19+
$vsMajorVersion = $vsInfo.installationVersion.Split('.')[0]
20+
$instanceDir = Join-Path $env:USERPROFILE "AppData\Local\Microsoft\VisualStudio\$vsMajorVersion.0_$vsId"
21+
22+
Create-Directory $instanceDir
23+
24+
$sdkFile = Join-Path $instanceDir 'sdk.txt'
25+
26+
$desiredLine = 'UsePreviews=True'
27+
$existingLines = @()
28+
29+
if (Test-Path $sdkFile) {
30+
$existingLines = @(Get-Content -Path $sdkFile -Encoding ASCII)
31+
}
32+
33+
# Determine how to place the UsePreviews flag based on existing content.
34+
$replacementIndex = -1
35+
for ($i = 0; $i -lt $existingLines.Count; $i++) {
36+
if ($existingLines[$i] -match '^UsePreviews=.*$') {
37+
$replacementIndex = $i
38+
break
39+
}
40+
}
41+
42+
# Replace the existing line to enforce it as True
43+
if ($replacementIndex -ge 0) {
44+
$updatedLines = $existingLines
45+
$updatedLines[$replacementIndex] = $desiredLine
46+
}
47+
elseif ($existingLines.Count -gt 0) {
48+
# Write to the top of the file but keep the remaining portion (assumption: order does not matter to VS)
49+
$updatedLines = @($desiredLine) + $existingLines
50+
}
51+
else {
52+
# Write a whole new file
53+
$updatedLines = @($desiredLine)
54+
}
55+
56+
Set-Content -Path $sdkFile -Value $updatedLines -Encoding ASCII
57+
58+
Write-Host "Updated $sdkFile"
59+
Get-Content -Path $sdkFile | ForEach-Object { Write-Host " $_" }

0 commit comments

Comments
 (0)