@@ -5,24 +5,51 @@ package base
5
5
6
6
import com.intellij.execution.configurations.GeneralCommandLine
7
7
import com.intellij.execution.util.ExecUtil
8
+ import com.intellij.openapi.application.ApplicationInfo
8
9
import com.intellij.openapi.application.ApplicationManager
9
10
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
11
+ import com.intellij.util.text.SemVer
10
12
import com.jetbrains.rider.test.base.PrepareTestEnvironment
11
13
import java.io.File
14
+ import java.nio.file.Paths
12
15
13
- val dotNetSdk by lazy {
14
- val output = ExecUtil .execAndGetOutput(GeneralCommandLine (" dotnet" , " --version" ))
15
- if (output.exitCode == 0 ) {
16
- " C:\\ Program Files\\ dotnet\\ sdk\\ ${output.stdout.trim()} " .also {
17
- println (" Using dotnet SDK at $it " )
18
- }
19
- } else {
16
+ val versions by lazy {
17
+ // would be nice if this were json https://github.com/dotnet/runtime/issues/3049
18
+ val output = ExecUtil .execAndGetOutput(GeneralCommandLine (" dotnet" , " --list-sdks" ))
19
+ if (output.exitCode != 0 ) {
20
20
throw IllegalStateException (" Failed to locate dotnet version: ${output.stderr} " )
21
21
}
22
+
23
+ output.stdout.trim().lines().map {
24
+ val (version, path) = it.split(' ' , limit = 2 )
25
+ val sdkSemVer = SemVer .parseFromText(version) ? : throw RuntimeException (" Could not parse .NET SDK version as SemVar: $version " )
26
+ sdkSemVer to path.trim(' [' , ' ]' )
27
+ }.sortedByDescending { it.first }
28
+ }
29
+
30
+ val dotNetSdk by lazy {
31
+ val version = ApplicationInfo .getInstance().build.baselineVersion
32
+
33
+ val sdk = when {
34
+ // FIX_WHEN_MIN_IS_212: Rider is not aware of .NET 6.0 until 212
35
+ version < 212 ->
36
+ versions.firstOrNull { it.first.major < 6 }
37
+ ? : throw RuntimeException (" Current IDE profile '$version ' requires .NET < 6, but only found: $versions " )
38
+ // otherwise use latest
39
+ else -> versions.first()
40
+ }
41
+
42
+ val (sdkVersion, sdkRoot) = sdk
43
+ val sdkVersionFolder = sdkVersion.rawVersion
44
+ val sdkPath = Paths .get(sdkRoot, sdkVersionFolder).toAbsolutePath().toString()
45
+
46
+ println (" Using .NET SDK '$sdkVersionFolder ' at path: '$sdkPath '" )
47
+
48
+ return @lazy sdkPath
22
49
}
23
50
24
51
val msBuild by lazy {
25
- " ${ dotNetSdk} \\ MSBuild.dll"
52
+ Paths .get( dotNetSdk, " MSBuild.dll" ).toAbsolutePath().toString()
26
53
}
27
54
28
55
// TODO: Remove when https://youtrack.jetbrains.com/issue/RIDER-47995 is fixed FIX_WHEN_MIN_IS_212
0 commit comments