diff --git a/src/app/Fake.Runtime/SdkAssemblyResolver.fs b/src/app/Fake.Runtime/SdkAssemblyResolver.fs index 0bc6bca1c9c..0a687d94155 100644 --- a/src/app/Fake.Runtime/SdkAssemblyResolver.fs +++ b/src/app/Fake.Runtime/SdkAssemblyResolver.fs @@ -15,6 +15,7 @@ open Microsoft.Deployment.DotNet.Releases /// package extract them a and reference them. type SdkAssemblyResolver() = #if DOTNETCORE + let CustomDotNetHostPath = Environment.environVarOrDefault "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_PATH" "" member this.SdkVersionRaw = "6.0" @@ -72,9 +73,12 @@ type SdkAssemblyResolver() = let systemInstallDir = DotNet.defaultSystemInstallDir let dotnetHostPath = - match File.Exists(userInstallDir dotnetHost) with - | true -> userInstallDir - | false -> systemInstallDir + if not(String.isNullOrEmpty CustomDotNetHostPath) + then CustomDotNetHostPath + else + match File.Exists(userInstallDir dotnetHost) with + | true -> userInstallDir + | false -> systemInstallDir let referenceAssembliesPath = dotnetHostPath @@ -93,7 +97,7 @@ type SdkAssemblyResolver() = ) |> Seq.toList | false -> - failwithf "Could not found referenced assemblies in path: '%s', please check installed SDK and runtime versions" referenceAssembliesPath + failwithf "Could not find referenced assemblies in path: '%s', please check installed SDK and runtime versions" referenceAssembliesPath member this.NetStandard20ReferenceAssemblies ( diff --git a/src/test/Fake.Core.IntegrationTests/Fake.DotNet.sdkAssemblyResolver.fs b/src/test/Fake.Core.IntegrationTests/Fake.DotNet.sdkAssemblyResolver.fs index db207e8a592..ff0eaf92be0 100644 --- a/src/test/Fake.Core.IntegrationTests/Fake.DotNet.sdkAssemblyResolver.fs +++ b/src/test/Fake.Core.IntegrationTests/Fake.DotNet.sdkAssemblyResolver.fs @@ -8,6 +8,7 @@ open System.IO open Fake.IO.FileSystemOperators open Expecto open Fake.Core.IntegrationTests.TestHelpers +open Fake.Runtime [] let tests = @@ -32,13 +33,26 @@ let tests = testCase "Runner run script with 6.0.100-preview.3.21202.5 SDK version assemblies" <| fun _ -> try + use d = createTestDir() + let installerDir = Path.Combine(d.Dir, "Temp Dir") + Directory.create installerDir + let preparedDir = Path.Combine(d.Dir, "Install Dir") + Directory.create preparedDir + DotNet.install (fun option -> - { option with + { option with + InstallerOptions = fun o -> + { option.InstallerOptions o with + CustomDownloadDir = Some installerDir } ForceInstall = true - WorkingDirectory = scenarioTempPath "core-reference-assemblies-net60" + WorkingDirectory = scenarioTempPath "core-reference-assemblies-net60-preview" + CustomInstallDir = Some preparedDir Channel = DotNet.CliChannel.Version 6 0 Version = DotNet.CliVersion.Version "6.0.100-preview.3.21202.5" }) |> ignore + + Environment.setEnvironVar "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_PATH" preparedDir + let result = handleAndFormat <| fun _ -> fakeRunAndCheck Ctx.Verbose "reference-assemblies.fsx" "reference-assemblies.fsx" "core-reference-assemblies-net60-preview" @@ -51,20 +65,31 @@ let tests = (sprintf "stdout should contain path like '%s', but was: '%s'" expectedNet6PathPortion stdOut) |> Expect.isTrue (stdOut.Contains expectedNet6PathPortion) finally - ignore "" // clean up after the test run - Directory.delete DotNet.defaultUserInstallDir + Environment.setEnvironVar "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_PATH" "" testCase "Runner run script with 6.0.100 SDK version assemblies" <| fun _ -> try + use d = createTestDir() + let installerDir = Path.Combine(d.Dir, "Temp Dir") + Directory.create installerDir + let preparedDir = Path.Combine(d.Dir, "Install Dir") + Directory.create preparedDir + DotNet.install (fun option -> - { option with + { option with + InstallerOptions = fun o -> + { option.InstallerOptions o with + CustomDownloadDir = Some installerDir } ForceInstall = true WorkingDirectory = scenarioTempPath "core-reference-assemblies-net60" + CustomInstallDir = Some preparedDir Channel = DotNet.CliChannel.Version 6 0 Version = DotNet.CliVersion.Version "6.0.100" }) |> ignore + Environment.setEnvironVar "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_PATH" preparedDir + let result = handleAndFormat <| fun _ -> fakeRunAndCheck Ctx.Verbose "reference-assemblies.fsx" "reference-assemblies.fsx" "core-reference-assemblies-net60" @@ -77,8 +102,7 @@ let tests = (sprintf "stdout should contain path like '%s', but was: '%s'" expectedNet6PathPortion stdOut) |> Expect.isTrue (stdOut.Contains expectedNet6PathPortion) finally - ignore "" // clean up after the test run - Directory.delete DotNet.defaultUserInstallDir + Environment.setEnvironVar "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_PATH" "" ]