From a3a60229904e8373ed680ed3f1e80a635c0ef447 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sun, 26 May 2024 07:55:51 +0100 Subject: [PATCH 1/5] Update assembly-resolver to not hardcode .NET 6.0 --- src/app/Fake.Runtime/SdkAssemblyResolver.fs | 69 +++++++++++++-------- 1 file changed, 43 insertions(+), 26 deletions(-) diff --git a/src/app/Fake.Runtime/SdkAssemblyResolver.fs b/src/app/Fake.Runtime/SdkAssemblyResolver.fs index 22983bfac57..1f2bf27c7b9 100644 --- a/src/app/Fake.Runtime/SdkAssemblyResolver.fs +++ b/src/app/Fake.Runtime/SdkAssemblyResolver.fs @@ -33,20 +33,30 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = let RuntimeResolverResolveMethod = Environment.environVarOrDefault "FAKE_SDK_RESOLVER_RUNTIME_VERSION_RESOLVE_METHOD" "" + // Defaults still .NET 6.0 but could be overriden with .NET 8.0 or even comma-separated "6.0,8.0" + let RuntimeAssemblyVersions = + let versions = Environment.environVarOrDefault "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_VERSION" "6.0" + versions.Split([|',';';'|]) |> Array.toList + member this.LogLevel = logLevel - member this.SdkVersionRaw = "6.0" + member this.SdkVersionRaws = RuntimeAssemblyVersions + + member this.SdkVersions = RuntimeAssemblyVersions |> List.map(fun v -> ReleaseVersion(v + ".0")) - member this.SdkVersion = ReleaseVersion("6.0.0") + member this.PaketFrameworkIdentifiers = + this.SdkVersions |> List.map(fun thisSdk -> + FrameworkIdentifier.DotNetFramework(FrameworkVersion.TryParse(thisSdk.Major.ToString()).Value)) - member this.PaketFrameworkIdentifier = - FrameworkIdentifier.DotNetFramework(FrameworkVersion.TryParse(this.SdkVersion.Major.ToString()).Value) + member this.SdkVersionRaw = RuntimeAssemblyVersions |> Seq.head + member this.SdkVersion = this.SdkVersions |> Seq.head + member this.PaketFrameworkIdentifier = this.PaketFrameworkIdentifiers |> Seq.head member this.SdkVersionFromGlobalJson = DotNet.tryGetSDKVersionFromGlobalJson () member this.IsSdkVersionFromGlobalJsonSameAsSdkVersion() = match this.SdkVersionFromGlobalJson with - | Some version -> ReleaseVersion(version).Major.Equals(this.SdkVersion.Major) + | Some version -> this.SdkVersions |> List.exists(fun thisSdk -> ReleaseVersion(version).Major .Equals thisSdk.Major) | None -> false member this.DotNetBinaryName = if Environment.isUnix then "dotnet" else "dotnet.exe" @@ -133,7 +143,7 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = |> Async.AwaitTask |> Async.RunSynchronously |> List.ofSeq - |> List.find (fun product -> product.ProductVersion.Equals(this.SdkVersionRaw)) + |> List.find (fun product -> this.SdkVersionRaws |> List.exists(fun raws -> product.ProductVersion.Equals raws)) sdkVersionReleases.GetReleasesAsync() |> Async.AwaitTask @@ -204,28 +214,34 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = member this.SdkReferenceAssemblies() = - let referenceAssembliesPath = - this.ResolveDotNetRoot() - |> Option.map (fun dotnetRoot -> - dotnetRoot - "packs" - "Microsoft.NETCore.App.Ref" - this.ResolveSdkRuntimeVersion() - "ref" - "net" + this.SdkVersionRaw) - - match referenceAssembliesPath with - | None -> failwithf "Could not find referenced assemblies, please check installed SDK and runtime versions" - | Some referenceAssembliesPath -> + let referenceAssembliesPaths = + this.SdkVersionRaws |> List.choose(fun rawVersion -> + this.ResolveDotNetRoot() + |> Option.map (fun dotnetRoot -> + dotnetRoot + "packs" + "Microsoft.NETCore.App.Ref" + this.ResolveSdkRuntimeVersion() + "ref" + "net" + rawVersion)) + + if Seq.isEmpty referenceAssembliesPaths then + failwithf "Could not find referenced assemblies, please check installed SDK and runtime versions" + else if this.LogLevel.PrintVerbose then - Trace.tracefn $"Resolved referenced SDK path: {referenceAssembliesPath}" - - if Directory.Exists referenceAssembliesPath then - Directory.GetFiles(referenceAssembliesPath, "*.dll") |> Seq.toList - else + let paths = String.Join(",", referenceAssembliesPaths) + Trace.tracefn $"Resolved referenced SDK paths: {paths}" + + let referenceAssembliesPath = + referenceAssembliesPaths |> List.tryFind(fun referenceAssembliesPath -> Directory.Exists referenceAssembliesPath) + match referenceAssembliesPath with + | Some pathFound -> + Directory.GetFiles(pathFound, "*.dll") |> Seq.toList + | None -> + let paths = String.Join(",", referenceAssembliesPaths) failwithf "Could not find referenced assemblies in path: '%s', please check installed SDK and runtime versions" - referenceAssembliesPath + paths member this.NetStandard20ReferenceAssemblies ( @@ -308,6 +324,7 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = paketDependenciesFile: Lazy ) = if this.LogLevel.PrintVerbose then - Trace.tracefn $"Using .Net {this.SdkVersion.Major} assemblies" + let versions = String.Join(", and", this.SdkVersions |> List.map(fun v -> $" .Net{v.Major}")) + Trace.tracefn $"Using{versions} assemblies" this.SdkReferenceAssemblies() From 737b9c738e20a455879621f9a306d28b61c870f3 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Thu, 11 Jul 2024 16:29:04 +0100 Subject: [PATCH 2/5] Fantomas run --- src/app/Fake.Runtime/SdkAssemblyResolver.fs | 39 ++++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/src/app/Fake.Runtime/SdkAssemblyResolver.fs b/src/app/Fake.Runtime/SdkAssemblyResolver.fs index 1f2bf27c7b9..81f61e10411 100644 --- a/src/app/Fake.Runtime/SdkAssemblyResolver.fs +++ b/src/app/Fake.Runtime/SdkAssemblyResolver.fs @@ -34,18 +34,22 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = Environment.environVarOrDefault "FAKE_SDK_RESOLVER_RUNTIME_VERSION_RESOLVE_METHOD" "" // Defaults still .NET 6.0 but could be overriden with .NET 8.0 or even comma-separated "6.0,8.0" - let RuntimeAssemblyVersions = - let versions = Environment.environVarOrDefault "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_VERSION" "6.0" - versions.Split([|',';';'|]) |> Array.toList + let RuntimeAssemblyVersions = + let versions = + Environment.environVarOrDefault "FAKE_SDK_RESOLVER_CUSTOM_DOTNET_VERSION" "6.0" + + versions.Split([| ','; ';' |]) |> Array.toList member this.LogLevel = logLevel member this.SdkVersionRaws = RuntimeAssemblyVersions - member this.SdkVersions = RuntimeAssemblyVersions |> List.map(fun v -> ReleaseVersion(v + ".0")) + member this.SdkVersions = + RuntimeAssemblyVersions |> List.map (fun v -> ReleaseVersion(v + ".0")) member this.PaketFrameworkIdentifiers = - this.SdkVersions |> List.map(fun thisSdk -> + this.SdkVersions + |> List.map (fun thisSdk -> FrameworkIdentifier.DotNetFramework(FrameworkVersion.TryParse(thisSdk.Major.ToString()).Value)) member this.SdkVersionRaw = RuntimeAssemblyVersions |> Seq.head @@ -56,7 +60,9 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = member this.IsSdkVersionFromGlobalJsonSameAsSdkVersion() = match this.SdkVersionFromGlobalJson with - | Some version -> this.SdkVersions |> List.exists(fun thisSdk -> ReleaseVersion(version).Major .Equals thisSdk.Major) + | Some version -> + this.SdkVersions + |> List.exists (fun thisSdk -> ReleaseVersion(version).Major.Equals thisSdk.Major) | None -> false member this.DotNetBinaryName = if Environment.isUnix then "dotnet" else "dotnet.exe" @@ -143,7 +149,9 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = |> Async.AwaitTask |> Async.RunSynchronously |> List.ofSeq - |> List.find (fun product -> this.SdkVersionRaws |> List.exists(fun raws -> product.ProductVersion.Equals raws)) + |> List.find (fun product -> + this.SdkVersionRaws + |> List.exists (fun raws -> product.ProductVersion.Equals raws)) sdkVersionReleases.GetReleasesAsync() |> Async.AwaitTask @@ -215,7 +223,8 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = member this.SdkReferenceAssemblies() = let referenceAssembliesPaths = - this.SdkVersionRaws |> List.choose(fun rawVersion -> + this.SdkVersionRaws + |> List.choose (fun rawVersion -> this.ResolveDotNetRoot() |> Option.map (fun dotnetRoot -> dotnetRoot @@ -232,13 +241,15 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = let paths = String.Join(",", referenceAssembliesPaths) Trace.tracefn $"Resolved referenced SDK paths: {paths}" - let referenceAssembliesPath = - referenceAssembliesPaths |> List.tryFind(fun referenceAssembliesPath -> Directory.Exists referenceAssembliesPath) + let referenceAssembliesPath = + referenceAssembliesPaths + |> List.tryFind (fun referenceAssembliesPath -> Directory.Exists referenceAssembliesPath) + match referenceAssembliesPath with - | Some pathFound -> - Directory.GetFiles(pathFound, "*.dll") |> Seq.toList + | Some pathFound -> Directory.GetFiles(pathFound, "*.dll") |> Seq.toList | None -> let paths = String.Join(",", referenceAssembliesPaths) + failwithf "Could not find referenced assemblies in path: '%s', please check installed SDK and runtime versions" paths @@ -324,7 +335,9 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = paketDependenciesFile: Lazy ) = if this.LogLevel.PrintVerbose then - let versions = String.Join(", and", this.SdkVersions |> List.map(fun v -> $" .Net{v.Major}")) + let versions = + String.Join(", and", this.SdkVersions |> List.map (fun v -> $" .Net{v.Major}")) + Trace.tracefn $"Using{versions} assemblies" this.SdkReferenceAssemblies() From 6acd0651615ffec1ee53510887546ae9a71c68ff Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Thu, 11 Jul 2024 18:27:44 +0100 Subject: [PATCH 3/5] Changes from xperiandri feedback --- src/app/Fake.Runtime/SdkAssemblyResolver.fs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/Fake.Runtime/SdkAssemblyResolver.fs b/src/app/Fake.Runtime/SdkAssemblyResolver.fs index 81f61e10411..575fc23cf78 100644 --- a/src/app/Fake.Runtime/SdkAssemblyResolver.fs +++ b/src/app/Fake.Runtime/SdkAssemblyResolver.fs @@ -218,7 +218,8 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = version | None -> - failwithf $"Could not find a suitable .NET 6 runtime version matching SDK version: {sdkVersion.ToString()}" + failwithf + $"Could not find a suitable .NET 6 runtime version matching SDK version: {sdkVersion.ToString()} (You can also try setting environment variable FAKE_SDK_RESOLVER_CUSTOM_DOTNET_VERSION to e.g. 8.0 )" member this.SdkReferenceAssemblies() = @@ -336,7 +337,7 @@ type SdkAssemblyResolver(logLevel: Trace.VerboseLevel) = ) = if this.LogLevel.PrintVerbose then let versions = - String.Join(", and", this.SdkVersions |> List.map (fun v -> $" .Net{v.Major}")) + String.Join(", and", this.SdkVersions |> List.map (fun v -> $" .NET{v.Major}")) Trace.tracefn $"Using{versions} assemblies" From 3ea4ae26ec49ab1cb3058384478bce8e51b71acc Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Thu, 11 Jul 2024 18:33:52 +0100 Subject: [PATCH 4/5] release notes update --- RELEASE_NOTES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index fb211d7de52..8c990023560 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,5 +1,8 @@ # Release Notes +## 6.0.1 - 2024-07-11 +* ENHANCEMENT: Fixes for usage in .NET 8.0 enviroment projects. + ## 6.0.1 - 2024-06-04 * BUGFIX: MSBuild.build adds a bad string at the end of properties, thanks @0x53A - https://github.com/fsprojects/FAKE/issues/2738 * ENHANCEMENT: Added shorthash to git functions, thanks @voronoipotato - https://github.com/fsprojects/FAKE/pull/2752 From 651019cc602ad52b0a9ff07dd4641b25763df99b Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sun, 14 Jul 2024 10:51:04 +0100 Subject: [PATCH 5/5] Update RELEASE_NOTES.md Co-authored-by: Andrii Chebukin --- RELEASE_NOTES.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 8c990023560..7899c81bf15 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,11 +1,9 @@ # Release Notes ## 6.0.1 - 2024-07-11 -* ENHANCEMENT: Fixes for usage in .NET 8.0 enviroment projects. - -## 6.0.1 - 2024-06-04 * BUGFIX: MSBuild.build adds a bad string at the end of properties, thanks @0x53A - https://github.com/fsprojects/FAKE/issues/2738 * ENHANCEMENT: Added shorthash to git functions, thanks @voronoipotato - https://github.com/fsprojects/FAKE/pull/2752 +* ENHANCEMENT: Fixes for usage in .NET 8.0 enviroment projects. ## 6.0.0 - 2023-02-20 * ENHANCEMENT: Site UI fixes and documentation link fixes.