From 6fbe5e73deeca0b4858c82bc9079d5573363a43c Mon Sep 17 00:00:00 2001 From: Matthias Dittrich Date: Sun, 7 Jul 2019 14:58:35 +0200 Subject: [PATCH 1/6] ignore temp folders --- .gitignore | 1 + integrationtests/.gitignore | 1 + 2 files changed, 2 insertions(+) create mode 100644 integrationtests/.gitignore diff --git a/.gitignore b/.gitignore index 5ac96e46183..1914dac1b29 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ tools/RazorEngine !tools/FAKE/tools/FakeLib.dll !tools/FAKE/tools/FakeLib.pdb .gitignore +!integrationtests/.gitignore _NCrunch_FAKE/ tools/FSharp.Compiler.Service tools/FSharp.Formatting.CommandTool/ diff --git a/integrationtests/.gitignore b/integrationtests/.gitignore new file mode 100644 index 00000000000..d9f4ad486bc --- /dev/null +++ b/integrationtests/.gitignore @@ -0,0 +1 @@ +**/temp From 5f97ec32371bba6d5506d7510d6026a078583ca7 Mon Sep 17 00:00:00 2001 From: Matthias Dittrich Date: Sun, 7 Jul 2019 15:33:46 +0200 Subject: [PATCH 2/6] Fix some tooling problems --- src/app/Fake.Runtime/Tooling.fs | 126 ++++++++++++++++---------------- 1 file changed, 65 insertions(+), 61 deletions(-) diff --git a/src/app/Fake.Runtime/Tooling.fs b/src/app/Fake.Runtime/Tooling.fs index 486eb83ba5f..f6039767d06 100644 --- a/src/app/Fake.Runtime/Tooling.fs +++ b/src/app/Fake.Runtime/Tooling.fs @@ -19,7 +19,7 @@ open System.Threading.Tasks open System.Net open Newtonsoft.Json.Linq -let private compatibleFakeVersion = "5.15.1-alpha.1104" +let private compatibleFakeVersion = "5.15.3" let private fakeDownloadUri version = sprintf "https://github.com/fsharp/FAKE/releases/download/%s/fake-dotnetcore-portable.zip" version |> Uri @@ -144,20 +144,21 @@ let getProjectOptions { Config = config; Prepared = prepared } : string[] = "--simpleresolution" :: "--targetprofile:netstandard" :: "--nowin32manifest" :: args |> List.toArray -let private errorTarget file msg desc = - let decl = - { File = file - Line = 0 - Column = 0 } - let target = - { Name = msg - HardDependencies = [||] - SoftDependencies = [||] - Declaration = decl - Description = desc } - target +type GetTargetsWarningOrErrorType = + | NoFakeScript = 1 + | MissingFakeCoreTargets = 2 + /// Most likely due to missing `Target.initEnvironment()` + | MissingNavigationInfo = 4 + | FakeCoreTargetsOlderThan5_15 = 3 + | ExecutionError = 5 + /// Most likely due to missing `Target.runOrDefault` + | EmptyInfoFile = 5 +type WarningOrError = + { Type : GetTargetsWarningOrErrorType + Message : string } +type GetTargetsResult = { WarningsAndErrors : WarningOrError []; Targets : Target [] } -let private runProcess (log: string -> unit) (workingDir: string) (exePath: string) (args: string) = +let private runProcess (log: bool -> string -> unit) (workingDir: string) (exePath: string) (args: string) = let psi = System.Diagnostics.ProcessStartInfo() psi.FileName <- exePath psi.WorkingDirectory <- workingDir @@ -169,8 +170,8 @@ let private runProcess (log: string -> unit) (workingDir: string) (exePath: stri use p = new System.Diagnostics.Process() p.StartInfo <- psi - p.OutputDataReceived.Add(fun ea -> log (ea.Data)) - p.ErrorDataReceived.Add(fun ea -> log (ea.Data)) + p.OutputDataReceived.Add(fun ea -> log false (ea.Data)) + p.ErrorDataReceived.Add(fun ea -> log true (ea.Data)) p.Start() |> ignore p.BeginOutputReadLine() @@ -181,7 +182,10 @@ let private runProcess (log: string -> unit) (workingDir: string) (exePath: stri exitCode -let private getTargetsLegacy (file:string) (ctx:FakeContext) : Async = async { +let private formatOutput (lines:ResizeArray) = + sprintf "Output: \n%s" (String.Join("\n", lines |> Seq.map (fun (isErr, msg) -> (if isErr then "Err: " else "Out: ") + msg))) + +let private getTargetsLegacy (file:string) (ctx:FakeContext) : Async = async { // pre Fake.Core.Targets upgrade let decl = { File = null @@ -193,12 +197,14 @@ let private getTargetsLegacy (file:string) (ctx:FakeContext) : Async let workingDir = Path.GetDirectoryName file let fakeArgs = sprintf "-s run \"%s\" -- --list" fileName let args = sprintf "\"%s\" %s" rt fakeArgs - let exitCode = runProcess (lines.Add) workingDir ctx.DotNetRuntime args + let exitCode = runProcess (fun isErr msg -> lines.Add(isErr, msg)) workingDir ctx.DotNetRuntime args if exitCode <> 0 then - return [| errorTarget file (sprintf "Running Script 'fake %s' failed (%d)" fakeArgs exitCode) "We tried to list the targets but your script failed" |] + let msg = sprintf "Running Script 'fake %s' failed (%d). %s" fakeArgs exitCode (formatOutput lines) + return { WarningsAndErrors = [| { Type = GetTargetsWarningOrErrorType.ExecutionError; Message = msg } |]; Targets = [||] } else let targets = lines + |> Seq.choose (fun (isErr, msg) -> if isErr then None else Some msg) |> Seq.filter (isNull >> not) |> Seq.choose (fun line -> // heuristic @@ -217,9 +223,9 @@ let private getTargetsLegacy (file:string) (ctx:FakeContext) : Async |> Some else None) |> Seq.toArray - return targets + return { WarningsAndErrors = [||]; Targets = targets } } -let private getTargetsJson (file:string) (ctx:FakeContext) : Async = async { +let private getTargetsJson (file:string) (ctx:FakeContext) : Async = async { // with --write-info support let! rt = getFakeRuntime () let lines = ResizeArray<_>() @@ -231,35 +237,40 @@ let private getTargetsJson (file:string) (ctx:FakeContext) : Async = // FAKE is clever enough to not recompile let fakeArgs = sprintf "-s run --nocache --fsiargs \"--debug:portable --optimize-\" \"%s\" -- --write-info \"%s\"" fileName resultsFile let args = sprintf "\"%s\" %s" rt fakeArgs - let exitCode = runProcess (lines.Add) workingDir ctx.DotNetRuntime args + let exitCode = runProcess (fun isErr msg -> lines.Add(isErr, msg)) workingDir ctx.DotNetRuntime args if exitCode <> 0 then - return [| errorTarget file (sprintf "Running Script 'fake %s' failed (%d)" fakeArgs exitCode) "We tried to retrieve the targets but your script failed" |] + let msg = sprintf "Running Script 'fake %s' failed (%d). %s" fakeArgs exitCode (formatOutput lines) + return { WarningsAndErrors = [| { Type = GetTargetsWarningOrErrorType.ExecutionError; Message = msg } |]; Targets = [||] } else let jsonStr = File.ReadAllText resultsFile - let jobj = JObject.Parse jsonStr - let parseStringWithNull (t:JToken) = - if isNull t || t.Type = JTokenType.Null then null - else string t - let parseDecl (t:JToken) = - { File = parseStringWithNull t.["file"]; Line = int t.["line"]; Column = int t.["column"] } - let parseDep (t:JToken) = - { Name = string t.["name"]; Declaration = parseDecl t.["declaration"] } - let parseArray parseItem (a:JToken) = - (a :?> JArray) - |> Seq.map parseItem + if String.IsNullOrEmpty jsonStr then + let msg = sprintf "Running Script 'fake %s' did not create an info file. Are you missing the `Target.runOrDefault` call at the end of your script?" fakeArgs + return { WarningsAndErrors = [| { Type = GetTargetsWarningOrErrorType.EmptyInfoFile; Message = msg } |]; Targets = [||] } + else + let jobj = JObject.Parse jsonStr + let parseStringWithNull (t:JToken) = + if isNull t || t.Type = JTokenType.Null then null + else string t + let parseDecl (t:JToken) = + { File = parseStringWithNull t.["file"]; Line = int t.["line"]; Column = int t.["column"] } + let parseDep (t:JToken) = + { Name = string t.["name"]; Declaration = parseDecl t.["declaration"] } + let parseArray parseItem (a:JToken) = + (a :?> JArray) + |> Seq.map parseItem + |> Seq.toArray + let parseTarget (t:JToken) = + { Name = string t.["name"] + Declaration = parseDecl t.["declaration"] + HardDependencies = parseArray parseDep t.["hardDependencies"] + SoftDependencies = parseArray parseDep t.["softDependencies"] + Description = string t.["description"] } + let jTargets = jobj.["targets"] :?> JArray + let targets = + jTargets + |> Seq.map parseTarget |> Seq.toArray - let parseTarget (t:JToken) = - { Name = string t.["name"] - Declaration = parseDecl t.["declaration"] - HardDependencies = parseArray parseDep t.["hardDependencies"] - SoftDependencies = parseArray parseDep t.["softDependencies"] - Description = string t.["description"] } - let jTargets = jobj.["targets"] :?> JArray - let targets = - jTargets - |> Seq.map parseTarget - |> Seq.toArray - return targets + return { WarningsAndErrors = [||]; Targets = targets } finally try File.Delete resultsFile with e -> () } @@ -271,13 +282,6 @@ let private getTargetsVersion (context:Runners.FakeContext) : Version option = |> Seq.tryFind (fun a -> a.Name = "Fake.Core.Target") |> Option.map (fun a -> a.Version) targetVersion -type GetTargetsWarningOrErrorType = - | NoFakeScript = 1 - | MissingFakeCoreTargets = 2 - // Most likely due to missing `Target.initEnvironment()` - | MissingNavigationInfo = 4 - | FakeCoreTargetsOlderThan5_15 = 3 -type GetTargetsResult = { WarningsAndErrors : GetTargetsWarningOrErrorType []; Targets : Target [] } // filePath -> hash * Task let private getTargetsDict = new System.Collections.Concurrent.ConcurrentDictionary>() @@ -285,7 +289,7 @@ let getTargets (file:string) (ctx:FakeContext) : Async = async checkLogging() match detectFakeScript file with | None -> - return { WarningsAndErrors = [|GetTargetsWarningOrErrorType.NoFakeScript|]; Targets = [||] }// Ok [| errorTarget file "not a FAKE 5 script" "This file is not a valid FAKE 5 script" |] + return { WarningsAndErrors = [|{ Type = GetTargetsWarningOrErrorType.NoFakeScript; Message = "This file is not a valid FAKE 5 script" }|]; Targets = [||] }// Ok [| errorTarget file "not a FAKE 5 script" "This file is not a valid FAKE 5 script" |] | Some { Config = config; Prepared = prepared } -> // check cache let cacheDir = prepared._CacheDir @@ -299,19 +303,19 @@ let getTargets (file:string) (ctx:FakeContext) : Async = async let context, cache = CoreCache.prepareContext config prov match getTargetsVersion context with | None -> - return { WarningsAndErrors = [|GetTargetsWarningOrErrorType.MissingFakeCoreTargets|]; Targets = [||] } + return { WarningsAndErrors = [| { Type = GetTargetsWarningOrErrorType.MissingFakeCoreTargets; Message = "The 'Fake.Core.Target' package is not referenced." }|]; Targets = [||] } | Some v when v < Version(5, 15) -> - let! targets = getTargetsLegacy file ctx - return { WarningsAndErrors = [|GetTargetsWarningOrErrorType.FakeCoreTargetsOlderThan5_15|]; Targets = targets } + let! resp = getTargetsLegacy file ctx + return { resp with WarningsAndErrors = [| yield! resp.WarningsAndErrors; yield { Type = GetTargetsWarningOrErrorType.FakeCoreTargetsOlderThan5_15; Message = "this script should be updated to at least Fake.Core.Target 5.15" }|]; } | Some v -> // Use newer logic - let! targets = getTargetsJson file ctx + let! resp = getTargetsJson file ctx let warnings = - if targets.Length > 0 then - if isNull targets.[0].Declaration.File then [|GetTargetsWarningOrErrorType.MissingNavigationInfo|] + if resp.Targets.Length > 0 then + if isNull resp.Targets.[0].Declaration.File then [|{ Type = GetTargetsWarningOrErrorType.MissingNavigationInfo; Message="navigation is missing, are you missing 'Target.initEnvironment()` at the top?"}|] else [||] else [||] - return { WarningsAndErrors = warnings; Targets = targets } + return { resp with WarningsAndErrors = [|yield! resp.WarningsAndErrors; yield! warnings|] } } |> Async.StartAsTask From c9647fd55f1f0240ee88aa8576f388d84fab6968 Mon Sep 17 00:00:00 2001 From: Matthias Dittrich Date: Sun, 7 Jul 2019 16:23:47 +0200 Subject: [PATCH 3/6] try to reoder targetframeworks, update release notes --- RELEASE_NOTES.md | 4 ++++ integrationtests/.gitignore | 1 + src/app/Fake.Api.GitHub/Fake.Api.GitHub.fsproj | 2 +- src/app/Fake.Api.HockeyApp/Fake.Api.HockeyApp.fsproj | 2 +- src/app/Fake.Api.Slack/Fake.Api.Slack.fsproj | 2 +- .../Fake.Azure.CloudServices/Fake.Azure.CloudServices.fsproj | 2 +- src/app/Fake.Azure.Emulators/Fake.Azure.Emulators.fsproj | 2 +- src/app/Fake.Azure.Kudu/Fake.Azure.Kudu.fsproj | 2 +- src/app/Fake.Azure.WebJobs/Fake.Azure.WebJobs.fsproj | 2 +- .../Fake.BuildServer.AppVeyor.fsproj | 2 +- .../Fake.BuildServer.GitLab/Fake.BuildServer.GitLab.fsproj | 2 +- .../Fake.BuildServer.TeamCity.fsproj | 2 +- .../Fake.BuildServer.TeamFoundation.fsproj | 2 +- .../Fake.BuildServer.Travis/Fake.BuildServer.Travis.fsproj | 2 +- .../Fake.Core.CommandLineParsing.fsproj | 2 +- src/app/Fake.Core.Context/Fake.Core.Context.fsproj | 2 +- src/app/Fake.Core.Environment/Fake.Core.Environment.fsproj | 2 +- src/app/Fake.Core.FakeVar/Fake.Core.FakeVar.fsproj | 2 +- src/app/Fake.Core.Process/Fake.Core.Process.fsproj | 2 +- src/app/Fake.Core.ReleaseNotes/Fake.Core.ReleaseNotes.fsproj | 2 +- src/app/Fake.Core.SemVer/Fake.Core.SemVer.fsproj | 2 +- src/app/Fake.Core.String/Fake.Core.String.fsproj | 2 +- src/app/Fake.Core.Target/Fake.Core.Target.fsproj | 2 +- src/app/Fake.Core.Tasks/Fake.Core.Tasks.fsproj | 2 +- src/app/Fake.Core.Trace/Fake.Core.Trace.fsproj | 2 +- src/app/Fake.Core.UserInput/Fake.Core.UserInput.fsproj | 2 +- src/app/Fake.Core.Vault/Fake.Core.Vault.fsproj | 2 +- src/app/Fake.Core.Xml/Fake.Core.Xml.fsproj | 2 +- .../Fake.Documentation.DocFx/Fake.Documentation.DocFx.fsproj | 2 +- .../Fake.DotNet.AssemblyInfoFile.fsproj | 2 +- src/app/Fake.DotNet.Cli/Fake.DotNet.Cli.fsproj | 2 +- .../Fake.DotNet.FSFormatting/Fake.DotNet.FSFormatting.fsproj | 2 +- src/app/Fake.DotNet.Fsc/Fake.DotNet.Fsc.fsproj | 2 +- src/app/Fake.DotNet.Fsi/Fake.DotNet.Fsi.fsproj | 2 +- src/app/Fake.DotNet.FxCop/Fake.DotNet.FxCop.fsproj | 2 +- src/app/Fake.DotNet.ILMerge/Fake.DotNet.ILMerge.fsproj | 2 +- src/app/Fake.DotNet.MSBuild/Fake.DotNet.MSBuild.fsproj | 2 +- src/app/Fake.DotNet.Mage/Fake.DotNet.Mage.fsproj | 2 +- src/app/Fake.DotNet.NuGet/Fake.DotNet.NuGet.fsproj | 2 +- src/app/Fake.DotNet.Paket/Fake.DotNet.Paket.fsproj | 2 +- .../Fake.DotNet.Testing.DotCover.fsproj | 2 +- .../Fake.DotNet.Testing.Expecto.fsproj | 2 +- .../Fake.DotNet.Testing.MSTest.fsproj | 2 +- .../Fake.DotNet.Testing.MSpec.fsproj | 2 +- .../Fake.DotNet.Testing.NUnit.fsproj | 2 +- .../Fake.DotNet.Testing.OpenCover.fsproj | 2 +- .../Fake.DotNet.Testing.SpecFlow.fsproj | 2 +- .../Fake.DotNet.Testing.VSTest.fsproj | 2 +- .../Fake.DotNet.Testing.XUnit2.fsproj | 2 +- src/app/Fake.DotNet.Xamarin/Fake.DotNet.Xamarin.fsproj | 2 +- src/app/Fake.DotNet.Xdt/Fake.DotNet.Xdt.fsproj | 2 +- src/app/Fake.IO.FileSystem/Fake.IO.FileSystem.fsproj | 2 +- src/app/Fake.IO.Zip/Fake.IO.Zip.fsproj | 2 +- .../Fake.Installer.InnoSetup/Fake.Installer.InnoSetup.fsproj | 2 +- .../Fake.Installer.Squirrel/Fake.Installer.Squirrel.fsproj | 2 +- src/app/Fake.Installer.Wix/Fake.Installer.Wix.fsproj | 2 +- src/app/Fake.Net.Http/Fake.Net.Http.fsproj | 2 +- src/app/Fake.Sql.DacPac/Fake.Sql.DacPac.fsproj | 2 +- src/app/Fake.Sql.SqlServer/Fake.Sql.SqlServer.fsproj.old | 2 +- src/app/Fake.Testing.Common/Fake.Testing.Common.fsproj | 2 +- .../Fake.Testing.ReportGenerator.fsproj | 2 +- src/app/Fake.Testing.SonarQube/Fake.Testing.SonarQube.fsproj | 2 +- src/app/Fake.Tools.Git/Fake.Tools.Git.fsproj | 2 +- src/app/Fake.Tools.GitVersion/Fake.Tools.GitVersion.fsproj | 2 +- src/app/Fake.Tools.Octo/Fake.Tools.Octo.fsproj | 2 +- src/app/Fake.Tools.Pickles/Fake.Tools.Pickles.fsproj | 2 +- src/app/Fake.Tools.Rsync/Fake.Tools.Rsync.fsproj | 2 +- .../Fake.Windows.Chocolatey/Fake.Windows.Chocolatey.fsproj | 2 +- src/app/Fake.Windows.Registry/Fake.Windows.Registry.fsproj | 2 +- 69 files changed, 72 insertions(+), 67 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index f0c54e1c9e0..ed4ef7ee2d9 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,5 +1,9 @@ # Release Notes +## 5.15.4-alpha - tbd + +* tbd + ## 5.15.3 - 2019-07-03 * BUGFIX: Disable fast restore for MSBuild version < 15.8 - https://github.com/fsprojects/Paket/pull/3611 diff --git a/integrationtests/.gitignore b/integrationtests/.gitignore index d9f4ad486bc..530b8d48ee1 100644 --- a/integrationtests/.gitignore +++ b/integrationtests/.gitignore @@ -1 +1,2 @@ **/temp +*.lock \ No newline at end of file diff --git a/src/app/Fake.Api.GitHub/Fake.Api.GitHub.fsproj b/src/app/Fake.Api.GitHub/Fake.Api.GitHub.fsproj index 6118a8cd703..14a1cea068e 100644 --- a/src/app/Fake.Api.GitHub/Fake.Api.GitHub.fsproj +++ b/src/app/Fake.Api.GitHub/Fake.Api.GitHub.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Api.GitHub Library diff --git a/src/app/Fake.Api.HockeyApp/Fake.Api.HockeyApp.fsproj b/src/app/Fake.Api.HockeyApp/Fake.Api.HockeyApp.fsproj index f52141227a5..2afe8067f9f 100644 --- a/src/app/Fake.Api.HockeyApp/Fake.Api.HockeyApp.fsproj +++ b/src/app/Fake.Api.HockeyApp/Fake.Api.HockeyApp.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Api.HockeyApp Library diff --git a/src/app/Fake.Api.Slack/Fake.Api.Slack.fsproj b/src/app/Fake.Api.Slack/Fake.Api.Slack.fsproj index c99273d2944..450b5169dd7 100644 --- a/src/app/Fake.Api.Slack/Fake.Api.Slack.fsproj +++ b/src/app/Fake.Api.Slack/Fake.Api.Slack.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Api.Slack Library diff --git a/src/app/Fake.Azure.CloudServices/Fake.Azure.CloudServices.fsproj b/src/app/Fake.Azure.CloudServices/Fake.Azure.CloudServices.fsproj index 3dbdf093564..6f797f45c0e 100644 --- a/src/app/Fake.Azure.CloudServices/Fake.Azure.CloudServices.fsproj +++ b/src/app/Fake.Azure.CloudServices/Fake.Azure.CloudServices.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Azure.CloudServices Library diff --git a/src/app/Fake.Azure.Emulators/Fake.Azure.Emulators.fsproj b/src/app/Fake.Azure.Emulators/Fake.Azure.Emulators.fsproj index d4db93b8a53..730c27e8f94 100644 --- a/src/app/Fake.Azure.Emulators/Fake.Azure.Emulators.fsproj +++ b/src/app/Fake.Azure.Emulators/Fake.Azure.Emulators.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Azure.Emulators Library diff --git a/src/app/Fake.Azure.Kudu/Fake.Azure.Kudu.fsproj b/src/app/Fake.Azure.Kudu/Fake.Azure.Kudu.fsproj index cb33b24a1a5..f2ea75a9152 100644 --- a/src/app/Fake.Azure.Kudu/Fake.Azure.Kudu.fsproj +++ b/src/app/Fake.Azure.Kudu/Fake.Azure.Kudu.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Azure.Kudu Library diff --git a/src/app/Fake.Azure.WebJobs/Fake.Azure.WebJobs.fsproj b/src/app/Fake.Azure.WebJobs/Fake.Azure.WebJobs.fsproj index 7e02b917add..aedbbe2378f 100644 --- a/src/app/Fake.Azure.WebJobs/Fake.Azure.WebJobs.fsproj +++ b/src/app/Fake.Azure.WebJobs/Fake.Azure.WebJobs.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Azure.WebJobs Library diff --git a/src/app/Fake.BuildServer.AppVeyor/Fake.BuildServer.AppVeyor.fsproj b/src/app/Fake.BuildServer.AppVeyor/Fake.BuildServer.AppVeyor.fsproj index a655bbf8607..8257bc56abe 100644 --- a/src/app/Fake.BuildServer.AppVeyor/Fake.BuildServer.AppVeyor.fsproj +++ b/src/app/Fake.BuildServer.AppVeyor/Fake.BuildServer.AppVeyor.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.BuildServer.AppVeyor Library diff --git a/src/app/Fake.BuildServer.GitLab/Fake.BuildServer.GitLab.fsproj b/src/app/Fake.BuildServer.GitLab/Fake.BuildServer.GitLab.fsproj index 1dc7280ab35..f8034c9a366 100644 --- a/src/app/Fake.BuildServer.GitLab/Fake.BuildServer.GitLab.fsproj +++ b/src/app/Fake.BuildServer.GitLab/Fake.BuildServer.GitLab.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.BuildServer.GitLab Library diff --git a/src/app/Fake.BuildServer.TeamCity/Fake.BuildServer.TeamCity.fsproj b/src/app/Fake.BuildServer.TeamCity/Fake.BuildServer.TeamCity.fsproj index 43c6eed2c38..dbf9dab9d2c 100644 --- a/src/app/Fake.BuildServer.TeamCity/Fake.BuildServer.TeamCity.fsproj +++ b/src/app/Fake.BuildServer.TeamCity/Fake.BuildServer.TeamCity.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.BuildServer.TeamCity Library diff --git a/src/app/Fake.BuildServer.TeamFoundation/Fake.BuildServer.TeamFoundation.fsproj b/src/app/Fake.BuildServer.TeamFoundation/Fake.BuildServer.TeamFoundation.fsproj index 8601bb43cfb..10fc41e9549 100644 --- a/src/app/Fake.BuildServer.TeamFoundation/Fake.BuildServer.TeamFoundation.fsproj +++ b/src/app/Fake.BuildServer.TeamFoundation/Fake.BuildServer.TeamFoundation.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.BuildServer.TeamFoundation Library diff --git a/src/app/Fake.BuildServer.Travis/Fake.BuildServer.Travis.fsproj b/src/app/Fake.BuildServer.Travis/Fake.BuildServer.Travis.fsproj index 8a5cdfe6904..70926b64d69 100644 --- a/src/app/Fake.BuildServer.Travis/Fake.BuildServer.Travis.fsproj +++ b/src/app/Fake.BuildServer.Travis/Fake.BuildServer.Travis.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.BuildServer.Travis Library diff --git a/src/app/Fake.Core.CommandLineParsing/Fake.Core.CommandLineParsing.fsproj b/src/app/Fake.Core.CommandLineParsing/Fake.Core.CommandLineParsing.fsproj index 17889e6ba69..b41bf899f7c 100644 --- a/src/app/Fake.Core.CommandLineParsing/Fake.Core.CommandLineParsing.fsproj +++ b/src/app/Fake.Core.CommandLineParsing/Fake.Core.CommandLineParsing.fsproj @@ -2,7 +2,7 @@ Fake.Core.CommandLineParsing Library - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 $(DefineConstants);RELEASE diff --git a/src/app/Fake.Core.Context/Fake.Core.Context.fsproj b/src/app/Fake.Core.Context/Fake.Core.Context.fsproj index bbbe9da5bfa..e63aa60b052 100644 --- a/src/app/Fake.Core.Context/Fake.Core.Context.fsproj +++ b/src/app/Fake.Core.Context/Fake.Core.Context.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Core.Context Library diff --git a/src/app/Fake.Core.Environment/Fake.Core.Environment.fsproj b/src/app/Fake.Core.Environment/Fake.Core.Environment.fsproj index e1e7ea73724..22ac72a2b06 100644 --- a/src/app/Fake.Core.Environment/Fake.Core.Environment.fsproj +++ b/src/app/Fake.Core.Environment/Fake.Core.Environment.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Core.Environment Library false diff --git a/src/app/Fake.Core.FakeVar/Fake.Core.FakeVar.fsproj b/src/app/Fake.Core.FakeVar/Fake.Core.FakeVar.fsproj index efdb163ca50..004420e464f 100644 --- a/src/app/Fake.Core.FakeVar/Fake.Core.FakeVar.fsproj +++ b/src/app/Fake.Core.FakeVar/Fake.Core.FakeVar.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Core.FakeVar Library diff --git a/src/app/Fake.Core.Process/Fake.Core.Process.fsproj b/src/app/Fake.Core.Process/Fake.Core.Process.fsproj index 0c8b58a8fe3..8741a86d5e6 100644 --- a/src/app/Fake.Core.Process/Fake.Core.Process.fsproj +++ b/src/app/Fake.Core.Process/Fake.Core.Process.fsproj @@ -2,7 +2,7 @@ Fake.Core.Process Library - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);RELEASE diff --git a/src/app/Fake.Core.ReleaseNotes/Fake.Core.ReleaseNotes.fsproj b/src/app/Fake.Core.ReleaseNotes/Fake.Core.ReleaseNotes.fsproj index 5a47b8f7bd4..abf8d56ac4d 100644 --- a/src/app/Fake.Core.ReleaseNotes/Fake.Core.ReleaseNotes.fsproj +++ b/src/app/Fake.Core.ReleaseNotes/Fake.Core.ReleaseNotes.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Core.ReleaseNotes Library diff --git a/src/app/Fake.Core.SemVer/Fake.Core.SemVer.fsproj b/src/app/Fake.Core.SemVer/Fake.Core.SemVer.fsproj index fc9413332fc..acb394f07b8 100644 --- a/src/app/Fake.Core.SemVer/Fake.Core.SemVer.fsproj +++ b/src/app/Fake.Core.SemVer/Fake.Core.SemVer.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Core.SemVer Library diff --git a/src/app/Fake.Core.String/Fake.Core.String.fsproj b/src/app/Fake.Core.String/Fake.Core.String.fsproj index 185f025fb71..7d3dd387658 100644 --- a/src/app/Fake.Core.String/Fake.Core.String.fsproj +++ b/src/app/Fake.Core.String/Fake.Core.String.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 $(DefineConstants);DOTNETCORE Fake.Core.String Library diff --git a/src/app/Fake.Core.Target/Fake.Core.Target.fsproj b/src/app/Fake.Core.Target/Fake.Core.Target.fsproj index 447a365bb69..d70a75abee0 100644 --- a/src/app/Fake.Core.Target/Fake.Core.Target.fsproj +++ b/src/app/Fake.Core.Target/Fake.Core.Target.fsproj @@ -1,7 +1,7 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Core.Target Library diff --git a/src/app/Fake.Core.Tasks/Fake.Core.Tasks.fsproj b/src/app/Fake.Core.Tasks/Fake.Core.Tasks.fsproj index 0ce4301da81..3e5cbc3ad0b 100644 --- a/src/app/Fake.Core.Tasks/Fake.Core.Tasks.fsproj +++ b/src/app/Fake.Core.Tasks/Fake.Core.Tasks.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Core.Tasks Library diff --git a/src/app/Fake.Core.Trace/Fake.Core.Trace.fsproj b/src/app/Fake.Core.Trace/Fake.Core.Trace.fsproj index 41c91df0914..f7ca91a80f3 100644 --- a/src/app/Fake.Core.Trace/Fake.Core.Trace.fsproj +++ b/src/app/Fake.Core.Trace/Fake.Core.Trace.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Core.Trace Library diff --git a/src/app/Fake.Core.UserInput/Fake.Core.UserInput.fsproj b/src/app/Fake.Core.UserInput/Fake.Core.UserInput.fsproj index 9b190f196a2..2a5a1f2ed36 100644 --- a/src/app/Fake.Core.UserInput/Fake.Core.UserInput.fsproj +++ b/src/app/Fake.Core.UserInput/Fake.Core.UserInput.fsproj @@ -1,6 +1,6 @@  - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Core.UserInput Library diff --git a/src/app/Fake.Core.Vault/Fake.Core.Vault.fsproj b/src/app/Fake.Core.Vault/Fake.Core.Vault.fsproj index 5c14a436960..be8e63ff64c 100644 --- a/src/app/Fake.Core.Vault/Fake.Core.Vault.fsproj +++ b/src/app/Fake.Core.Vault/Fake.Core.Vault.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Core.Vault Library false diff --git a/src/app/Fake.Core.Xml/Fake.Core.Xml.fsproj b/src/app/Fake.Core.Xml/Fake.Core.Xml.fsproj index 5e945e09952..61385fd1fd4 100644 --- a/src/app/Fake.Core.Xml/Fake.Core.Xml.fsproj +++ b/src/app/Fake.Core.Xml/Fake.Core.Xml.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Core.Xml Library diff --git a/src/app/Fake.Documentation.DocFx/Fake.Documentation.DocFx.fsproj b/src/app/Fake.Documentation.DocFx/Fake.Documentation.DocFx.fsproj index dba2cc618cb..e1f10e988e0 100644 --- a/src/app/Fake.Documentation.DocFx/Fake.Documentation.DocFx.fsproj +++ b/src/app/Fake.Documentation.DocFx/Fake.Documentation.DocFx.fsproj @@ -1,7 +1,7 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Documentation.DocFx Library diff --git a/src/app/Fake.DotNet.AssemblyInfoFile/Fake.DotNet.AssemblyInfoFile.fsproj b/src/app/Fake.DotNet.AssemblyInfoFile/Fake.DotNet.AssemblyInfoFile.fsproj index 64af4fa4b0b..250a1ab7b46 100644 --- a/src/app/Fake.DotNet.AssemblyInfoFile/Fake.DotNet.AssemblyInfoFile.fsproj +++ b/src/app/Fake.DotNet.AssemblyInfoFile/Fake.DotNet.AssemblyInfoFile.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.DotNet.AssemblyInfoFile Library diff --git a/src/app/Fake.DotNet.Cli/Fake.DotNet.Cli.fsproj b/src/app/Fake.DotNet.Cli/Fake.DotNet.Cli.fsproj index 3fd6494a698..a93da2e2594 100644 --- a/src/app/Fake.DotNet.Cli/Fake.DotNet.Cli.fsproj +++ b/src/app/Fake.DotNet.Cli/Fake.DotNet.Cli.fsproj @@ -1,6 +1,6 @@ - net462;netstandard2.0 + netstandard2.0;net462 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Cli Library diff --git a/src/app/Fake.DotNet.FSFormatting/Fake.DotNet.FSFormatting.fsproj b/src/app/Fake.DotNet.FSFormatting/Fake.DotNet.FSFormatting.fsproj index e645add5ce1..28e6a6113a2 100644 --- a/src/app/Fake.DotNet.FSFormatting/Fake.DotNet.FSFormatting.fsproj +++ b/src/app/Fake.DotNet.FSFormatting/Fake.DotNet.FSFormatting.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.FSFormatting Library diff --git a/src/app/Fake.DotNet.Fsc/Fake.DotNet.Fsc.fsproj b/src/app/Fake.DotNet.Fsc/Fake.DotNet.Fsc.fsproj index 19895d32f98..4bc0f0477c5 100644 --- a/src/app/Fake.DotNet.Fsc/Fake.DotNet.Fsc.fsproj +++ b/src/app/Fake.DotNet.Fsc/Fake.DotNet.Fsc.fsproj @@ -1,6 +1,6 @@ - net462;netstandard2.0 + netstandard2.0;net462 Fake.DotNet.Fsc Library diff --git a/src/app/Fake.DotNet.Fsi/Fake.DotNet.Fsi.fsproj b/src/app/Fake.DotNet.Fsi/Fake.DotNet.Fsi.fsproj index b8b73dea092..939890aa0fe 100644 --- a/src/app/Fake.DotNet.Fsi/Fake.DotNet.Fsi.fsproj +++ b/src/app/Fake.DotNet.Fsi/Fake.DotNet.Fsi.fsproj @@ -1,6 +1,6 @@ - net462;netstandard2.0 + netstandard2.0;net462 Fake.DotNet.Fsi Library diff --git a/src/app/Fake.DotNet.FxCop/Fake.DotNet.FxCop.fsproj b/src/app/Fake.DotNet.FxCop/Fake.DotNet.FxCop.fsproj index 9a814254024..24bfda1f65c 100644 --- a/src/app/Fake.DotNet.FxCop/Fake.DotNet.FxCop.fsproj +++ b/src/app/Fake.DotNet.FxCop/Fake.DotNet.FxCop.fsproj @@ -1,7 +1,7 @@  - net462;netstandard2.0 + netstandard2.0;net462 Fake.DotNet.FxCop Library diff --git a/src/app/Fake.DotNet.ILMerge/Fake.DotNet.ILMerge.fsproj b/src/app/Fake.DotNet.ILMerge/Fake.DotNet.ILMerge.fsproj index 387cbd0ee28..08f647efaae 100644 --- a/src/app/Fake.DotNet.ILMerge/Fake.DotNet.ILMerge.fsproj +++ b/src/app/Fake.DotNet.ILMerge/Fake.DotNet.ILMerge.fsproj @@ -1,7 +1,7 @@  - net462;netstandard2.0 + netstandard2.0;net462 Fake.DotNet.ILMerge Library diff --git a/src/app/Fake.DotNet.MSBuild/Fake.DotNet.MSBuild.fsproj b/src/app/Fake.DotNet.MSBuild/Fake.DotNet.MSBuild.fsproj index 3b4841d760f..c904713b5e8 100644 --- a/src/app/Fake.DotNet.MSBuild/Fake.DotNet.MSBuild.fsproj +++ b/src/app/Fake.DotNet.MSBuild/Fake.DotNet.MSBuild.fsproj @@ -1,6 +1,6 @@ - net462;netstandard2.0 + netstandard2.0;net462 $(DefineConstants);DOTNETCORE Fake.DotNet.MSBuild Library diff --git a/src/app/Fake.DotNet.Mage/Fake.DotNet.Mage.fsproj b/src/app/Fake.DotNet.Mage/Fake.DotNet.Mage.fsproj index d28d9c61cf5..2ab9fa11b28 100644 --- a/src/app/Fake.DotNet.Mage/Fake.DotNet.Mage.fsproj +++ b/src/app/Fake.DotNet.Mage/Fake.DotNet.Mage.fsproj @@ -2,7 +2,7 @@ Fake.DotNet.Mage Library - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);RELEASE diff --git a/src/app/Fake.DotNet.NuGet/Fake.DotNet.NuGet.fsproj b/src/app/Fake.DotNet.NuGet/Fake.DotNet.NuGet.fsproj index 0a9a0e28225..39b03753aa6 100644 --- a/src/app/Fake.DotNet.NuGet/Fake.DotNet.NuGet.fsproj +++ b/src/app/Fake.DotNet.NuGet/Fake.DotNet.NuGet.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.NuGet Library diff --git a/src/app/Fake.DotNet.Paket/Fake.DotNet.Paket.fsproj b/src/app/Fake.DotNet.Paket/Fake.DotNet.Paket.fsproj index 924787d424d..6d53dc7ae3f 100644 --- a/src/app/Fake.DotNet.Paket/Fake.DotNet.Paket.fsproj +++ b/src/app/Fake.DotNet.Paket/Fake.DotNet.Paket.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Paket Library diff --git a/src/app/Fake.DotNet.Testing.DotCover/Fake.DotNet.Testing.DotCover.fsproj b/src/app/Fake.DotNet.Testing.DotCover/Fake.DotNet.Testing.DotCover.fsproj index aaf4df4c866..aad672ed982 100644 --- a/src/app/Fake.DotNet.Testing.DotCover/Fake.DotNet.Testing.DotCover.fsproj +++ b/src/app/Fake.DotNet.Testing.DotCover/Fake.DotNet.Testing.DotCover.fsproj @@ -1,6 +1,6 @@  - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.DotCover Library diff --git a/src/app/Fake.DotNet.Testing.Expecto/Fake.DotNet.Testing.Expecto.fsproj b/src/app/Fake.DotNet.Testing.Expecto/Fake.DotNet.Testing.Expecto.fsproj index 587dccd44a5..bdc49ffce9d 100644 --- a/src/app/Fake.DotNet.Testing.Expecto/Fake.DotNet.Testing.Expecto.fsproj +++ b/src/app/Fake.DotNet.Testing.Expecto/Fake.DotNet.Testing.Expecto.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.Expecto Library diff --git a/src/app/Fake.DotNet.Testing.MSTest/Fake.DotNet.Testing.MSTest.fsproj b/src/app/Fake.DotNet.Testing.MSTest/Fake.DotNet.Testing.MSTest.fsproj index 87c7f582a3a..6fcd92193b7 100644 --- a/src/app/Fake.DotNet.Testing.MSTest/Fake.DotNet.Testing.MSTest.fsproj +++ b/src/app/Fake.DotNet.Testing.MSTest/Fake.DotNet.Testing.MSTest.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.MSTest Library diff --git a/src/app/Fake.DotNet.Testing.MSpec/Fake.DotNet.Testing.MSpec.fsproj b/src/app/Fake.DotNet.Testing.MSpec/Fake.DotNet.Testing.MSpec.fsproj index a778ab74e8d..a2c58af0f6f 100644 --- a/src/app/Fake.DotNet.Testing.MSpec/Fake.DotNet.Testing.MSpec.fsproj +++ b/src/app/Fake.DotNet.Testing.MSpec/Fake.DotNet.Testing.MSpec.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.MSpec Library diff --git a/src/app/Fake.DotNet.Testing.NUnit/Fake.DotNet.Testing.NUnit.fsproj b/src/app/Fake.DotNet.Testing.NUnit/Fake.DotNet.Testing.NUnit.fsproj index 33756652d82..7692c19c952 100644 --- a/src/app/Fake.DotNet.Testing.NUnit/Fake.DotNet.Testing.NUnit.fsproj +++ b/src/app/Fake.DotNet.Testing.NUnit/Fake.DotNet.Testing.NUnit.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.NUnit Library diff --git a/src/app/Fake.DotNet.Testing.OpenCover/Fake.DotNet.Testing.OpenCover.fsproj b/src/app/Fake.DotNet.Testing.OpenCover/Fake.DotNet.Testing.OpenCover.fsproj index eb9f381f003..0ae160c0b4c 100644 --- a/src/app/Fake.DotNet.Testing.OpenCover/Fake.DotNet.Testing.OpenCover.fsproj +++ b/src/app/Fake.DotNet.Testing.OpenCover/Fake.DotNet.Testing.OpenCover.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.OpenCover Library diff --git a/src/app/Fake.DotNet.Testing.SpecFlow/Fake.DotNet.Testing.SpecFlow.fsproj b/src/app/Fake.DotNet.Testing.SpecFlow/Fake.DotNet.Testing.SpecFlow.fsproj index def62948c04..3bc1c3637cf 100644 --- a/src/app/Fake.DotNet.Testing.SpecFlow/Fake.DotNet.Testing.SpecFlow.fsproj +++ b/src/app/Fake.DotNet.Testing.SpecFlow/Fake.DotNet.Testing.SpecFlow.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.SpecFlow Library diff --git a/src/app/Fake.DotNet.Testing.VSTest/Fake.DotNet.Testing.VSTest.fsproj b/src/app/Fake.DotNet.Testing.VSTest/Fake.DotNet.Testing.VSTest.fsproj index 048ecad2cae..1d5426de396 100644 --- a/src/app/Fake.DotNet.Testing.VSTest/Fake.DotNet.Testing.VSTest.fsproj +++ b/src/app/Fake.DotNet.Testing.VSTest/Fake.DotNet.Testing.VSTest.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.VSTest Library diff --git a/src/app/Fake.DotNet.Testing.XUnit2/Fake.DotNet.Testing.XUnit2.fsproj b/src/app/Fake.DotNet.Testing.XUnit2/Fake.DotNet.Testing.XUnit2.fsproj index 34e9425b2fc..dd877c9fcac 100644 --- a/src/app/Fake.DotNet.Testing.XUnit2/Fake.DotNet.Testing.XUnit2.fsproj +++ b/src/app/Fake.DotNet.Testing.XUnit2/Fake.DotNet.Testing.XUnit2.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.DotNet.Testing.XUnit2 Library diff --git a/src/app/Fake.DotNet.Xamarin/Fake.DotNet.Xamarin.fsproj b/src/app/Fake.DotNet.Xamarin/Fake.DotNet.Xamarin.fsproj index 0c66cb101f7..ab2b8ca125d 100644 --- a/src/app/Fake.DotNet.Xamarin/Fake.DotNet.Xamarin.fsproj +++ b/src/app/Fake.DotNet.Xamarin/Fake.DotNet.Xamarin.fsproj @@ -1,6 +1,6 @@ - net462;netstandard2.0 + netstandard2.0;net462 $(DefineConstants);DOTNETCORE Fake.DotNet.Xamarin Library diff --git a/src/app/Fake.DotNet.Xdt/Fake.DotNet.Xdt.fsproj b/src/app/Fake.DotNet.Xdt/Fake.DotNet.Xdt.fsproj index 0676e21fd73..c2153a3cb24 100644 --- a/src/app/Fake.DotNet.Xdt/Fake.DotNet.Xdt.fsproj +++ b/src/app/Fake.DotNet.Xdt/Fake.DotNet.Xdt.fsproj @@ -1,6 +1,6 @@ - net462;netstandard2.0 + netstandard2.0;net462 $(DefineConstants);DOTNETCORE Fake.DotNet.Xdt Library diff --git a/src/app/Fake.IO.FileSystem/Fake.IO.FileSystem.fsproj b/src/app/Fake.IO.FileSystem/Fake.IO.FileSystem.fsproj index dc186f59295..97e3ed40b7c 100644 --- a/src/app/Fake.IO.FileSystem/Fake.IO.FileSystem.fsproj +++ b/src/app/Fake.IO.FileSystem/Fake.IO.FileSystem.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 $(DefineConstants);DOTNETCORE Fake.IO.FileSystem Library diff --git a/src/app/Fake.IO.Zip/Fake.IO.Zip.fsproj b/src/app/Fake.IO.Zip/Fake.IO.Zip.fsproj index af646843319..9f2d42b90fb 100644 --- a/src/app/Fake.IO.Zip/Fake.IO.Zip.fsproj +++ b/src/app/Fake.IO.Zip/Fake.IO.Zip.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 $(DefineConstants);DOTNETCORE Fake.IO.Zip Library diff --git a/src/app/Fake.Installer.InnoSetup/Fake.Installer.InnoSetup.fsproj b/src/app/Fake.Installer.InnoSetup/Fake.Installer.InnoSetup.fsproj index 976d6f2ec5d..bf815b78246 100644 --- a/src/app/Fake.Installer.InnoSetup/Fake.Installer.InnoSetup.fsproj +++ b/src/app/Fake.Installer.InnoSetup/Fake.Installer.InnoSetup.fsproj @@ -1,7 +1,7 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Installer.InnoSetup Library diff --git a/src/app/Fake.Installer.Squirrel/Fake.Installer.Squirrel.fsproj b/src/app/Fake.Installer.Squirrel/Fake.Installer.Squirrel.fsproj index 25f1624a929..f7e633fc1e6 100644 --- a/src/app/Fake.Installer.Squirrel/Fake.Installer.Squirrel.fsproj +++ b/src/app/Fake.Installer.Squirrel/Fake.Installer.Squirrel.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Installer.Squirrel Library diff --git a/src/app/Fake.Installer.Wix/Fake.Installer.Wix.fsproj b/src/app/Fake.Installer.Wix/Fake.Installer.Wix.fsproj index a0893d7b541..336c6326d26 100644 --- a/src/app/Fake.Installer.Wix/Fake.Installer.Wix.fsproj +++ b/src/app/Fake.Installer.Wix/Fake.Installer.Wix.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Installer.Wix Library diff --git a/src/app/Fake.Net.Http/Fake.Net.Http.fsproj b/src/app/Fake.Net.Http/Fake.Net.Http.fsproj index f506bbc7dcd..0d7e99d7bd1 100644 --- a/src/app/Fake.Net.Http/Fake.Net.Http.fsproj +++ b/src/app/Fake.Net.Http/Fake.Net.Http.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Net.Http Library diff --git a/src/app/Fake.Sql.DacPac/Fake.Sql.DacPac.fsproj b/src/app/Fake.Sql.DacPac/Fake.Sql.DacPac.fsproj index 0462b9aa1a8..6e7f6afd97b 100644 --- a/src/app/Fake.Sql.DacPac/Fake.Sql.DacPac.fsproj +++ b/src/app/Fake.Sql.DacPac/Fake.Sql.DacPac.fsproj @@ -1,6 +1,6 @@  - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);DOTNETCORE Fake.Sql.DacPac Library diff --git a/src/app/Fake.Sql.SqlServer/Fake.Sql.SqlServer.fsproj.old b/src/app/Fake.Sql.SqlServer/Fake.Sql.SqlServer.fsproj.old index 52f42e896a7..32a36362555 100644 --- a/src/app/Fake.Sql.SqlServer/Fake.Sql.SqlServer.fsproj.old +++ b/src/app/Fake.Sql.SqlServer/Fake.Sql.SqlServer.fsproj.old @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);DOTNETCORE Fake.Sql.SqlServer Library diff --git a/src/app/Fake.Testing.Common/Fake.Testing.Common.fsproj b/src/app/Fake.Testing.Common/Fake.Testing.Common.fsproj index ab69679a82e..5c8a67ae2ec 100644 --- a/src/app/Fake.Testing.Common/Fake.Testing.Common.fsproj +++ b/src/app/Fake.Testing.Common/Fake.Testing.Common.fsproj @@ -1,7 +1,7 @@ 1.0.0 - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Testing.Common Library diff --git a/src/app/Fake.Testing.ReportGenerator/Fake.Testing.ReportGenerator.fsproj b/src/app/Fake.Testing.ReportGenerator/Fake.Testing.ReportGenerator.fsproj index 9b832a8e04f..cbf09a1913d 100644 --- a/src/app/Fake.Testing.ReportGenerator/Fake.Testing.ReportGenerator.fsproj +++ b/src/app/Fake.Testing.ReportGenerator/Fake.Testing.ReportGenerator.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Testing.ReportGenerator Library diff --git a/src/app/Fake.Testing.SonarQube/Fake.Testing.SonarQube.fsproj b/src/app/Fake.Testing.SonarQube/Fake.Testing.SonarQube.fsproj index d9ee9660b9b..475714f7ac3 100644 --- a/src/app/Fake.Testing.SonarQube/Fake.Testing.SonarQube.fsproj +++ b/src/app/Fake.Testing.SonarQube/Fake.Testing.SonarQube.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Testing.SonarQube Library diff --git a/src/app/Fake.Tools.Git/Fake.Tools.Git.fsproj b/src/app/Fake.Tools.Git/Fake.Tools.Git.fsproj index c80cc48357d..e77fe550f58 100644 --- a/src/app/Fake.Tools.Git/Fake.Tools.Git.fsproj +++ b/src/app/Fake.Tools.Git/Fake.Tools.Git.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Tools.Git Library diff --git a/src/app/Fake.Tools.GitVersion/Fake.Tools.GitVersion.fsproj b/src/app/Fake.Tools.GitVersion/Fake.Tools.GitVersion.fsproj index e1d0b5da991..75b86456dd0 100644 --- a/src/app/Fake.Tools.GitVersion/Fake.Tools.GitVersion.fsproj +++ b/src/app/Fake.Tools.GitVersion/Fake.Tools.GitVersion.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Tools.GitVersion Library diff --git a/src/app/Fake.Tools.Octo/Fake.Tools.Octo.fsproj b/src/app/Fake.Tools.Octo/Fake.Tools.Octo.fsproj index 0e05a4b0ad7..4771b9a04c0 100644 --- a/src/app/Fake.Tools.Octo/Fake.Tools.Octo.fsproj +++ b/src/app/Fake.Tools.Octo/Fake.Tools.Octo.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Tools.Octo Library diff --git a/src/app/Fake.Tools.Pickles/Fake.Tools.Pickles.fsproj b/src/app/Fake.Tools.Pickles/Fake.Tools.Pickles.fsproj index c4632bd58dc..c9e278f667d 100644 --- a/src/app/Fake.Tools.Pickles/Fake.Tools.Pickles.fsproj +++ b/src/app/Fake.Tools.Pickles/Fake.Tools.Pickles.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Tools.Pickles Library diff --git a/src/app/Fake.Tools.Rsync/Fake.Tools.Rsync.fsproj b/src/app/Fake.Tools.Rsync/Fake.Tools.Rsync.fsproj index 6a99bbbf70f..915f6e859bf 100644 --- a/src/app/Fake.Tools.Rsync/Fake.Tools.Rsync.fsproj +++ b/src/app/Fake.Tools.Rsync/Fake.Tools.Rsync.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 Fake.Tools.Rsync Library diff --git a/src/app/Fake.Windows.Chocolatey/Fake.Windows.Chocolatey.fsproj b/src/app/Fake.Windows.Chocolatey/Fake.Windows.Chocolatey.fsproj index eb1ed6dfb54..7aad9e79088 100644 --- a/src/app/Fake.Windows.Chocolatey/Fake.Windows.Chocolatey.fsproj +++ b/src/app/Fake.Windows.Chocolatey/Fake.Windows.Chocolatey.fsproj @@ -1,6 +1,6 @@ - net46;netstandard2.0 + netstandard2.0;net46 $(DefineConstants);NO_DOTNETCORE_BOOTSTRAP Fake.Windows.Chocolatey Library diff --git a/src/app/Fake.Windows.Registry/Fake.Windows.Registry.fsproj b/src/app/Fake.Windows.Registry/Fake.Windows.Registry.fsproj index 1072c56d36b..17246a3343b 100644 --- a/src/app/Fake.Windows.Registry/Fake.Windows.Registry.fsproj +++ b/src/app/Fake.Windows.Registry/Fake.Windows.Registry.fsproj @@ -1,6 +1,6 @@ - net46;netstandard1.6;netstandard2.0 + netstandard2.0;net46;netstandard1.6 Fake.Windows.Registry Library From ea2011662998d0796f15b199077542b5a695d213 Mon Sep 17 00:00:00 2001 From: Nat Date: Mon, 15 Jul 2019 14:13:01 -0500 Subject: [PATCH 4/6] Fix high memory use and slowness with large number of targets/dependencies --- src/app/Fake.Core.Target/Target.fs | 33 +- .../Fake.Core.UnitTests/Fake.Core.Target.fs | 447 ++++++++++++++++++ 2 files changed, 461 insertions(+), 19 deletions(-) diff --git a/src/app/Fake.Core.Target/Target.fs b/src/app/Fake.Core.Target/Target.fs index 4075a0adc54..76b5f39a15b 100644 --- a/src/app/Fake.Core.Target/Target.fs +++ b/src/app/Fake.Core.Target/Target.fs @@ -632,29 +632,24 @@ module Target = /// Determines a parallel build order for the given set of targets let internal determineBuildOrder (target : string) = - let _ = get target - - let rec visitDependenciesAux previousDependencies = function + let visited = new HashSet(StringComparer.OrdinalIgnoreCase) + let visitedTargets = new List() + let rec visitDependenciesAux = function // NOTE: should be tail recursive - | (visited, level, targetName) :: workLeft -> - let target = get targetName - let isVisited = - visited - |> Seq.exists (fun t -> String.Equals(t, targetName, StringComparison.OrdinalIgnoreCase)) - if isVisited then - visitDependenciesAux previousDependencies workLeft + | targetName :: workLeft -> + if visited.Add(targetName) + then + let target = get targetName + visitedTargets.Add(target) + let newLeft = target.Dependencies @ workLeft + visitDependenciesAux newLeft else - let deps = - target.Dependencies - |> List.map (fun (t) -> (String.toLower targetName::visited), level + 1, t) - let newVisitedDeps = target :: previousDependencies - visitDependenciesAux newVisitedDeps (deps @ workLeft) - | _ -> - previousDependencies - |> List.distinctBy (fun (t) -> String.toLower t.Name) + visitDependenciesAux workLeft + | _ -> visitedTargets |> Seq.toList + // first find the list of targets we "have" to build - let targets = visitDependenciesAux [] [[], 0, target] + let targets = visitDependenciesAux [target] // Try to build the optimal tree by starting with the targets without dependencies and remove them from the list iteratively let targetLeftSet = HashSet<_>(StringComparer.OrdinalIgnoreCase) diff --git a/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs b/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs index b582de59669..f637db902e4 100644 --- a/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs +++ b/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs @@ -587,6 +587,453 @@ let tests = let context = run "SimpleTest" Expect.equal true context.HasError "Expected failure" Expect.equal 2 context.PreviousTargets.Length "Expected context to contain both targets" // second one as "skipped" + + // These dependencies are taken from large .NET/COM VS sln. Only the names have been changed. + // Printing the running order was taking 3 minutes and ~ 12 GB or RAM using FAKE 5.15 + Fake.ContextHelper.fakeContextTestCase "Running order resolves quickly when there are numerous targets with numerous dependencies" <| fun _ -> + Target.create "Bersil" ignore + Target.create "komatiks" ignore + Target.create "Stalk" ignore + Target.create "swiftest" ignore + Target.create "horsepower-year" ignore + Target.create "Phascum" ignore + Target.create "wen" ignore + Target.create "comparableness" ignore + Target.create "outgreen" ignore + Target.create "Takhaar" ignore + Target.create "piperidine" ignore + Target.create "interproximate" ignore + Target.create "collection" ignore + Target.create "kaw-" ignore + Target.create "hydrachnid" ignore + Target.create "subarytenoidal" ignore + Target.create "aguamas" ignore + Target.create "ondogram" ignore + Target.create "archeal" ignore + Target.create "hollowroot" ignore + Target.create "white-bosomed" ignore + Target.create "nonlicentiousness" ignore + Target.create "unslashed" ignore + Target.create "micrometeorite" ignore + Target.create "carp-" ignore + Target.create "Merrie" ignore + Target.create "matriarches" ignore + Target.create "soundless" ignore + Target.create "pro-Elizabethan" ignore + Target.create "coadjute" ignore + Target.create "hypozoic" ignore + Target.create "demasculinize" ignore + Target.create "nonsubjectiveness" ignore + Target.create "relacing" ignore + Target.create "pettings" ignore + Target.create "terroristic" ignore + Target.create "quincunx" ignore + Target.create "unquestioningly" ignore + Target.create "Peosta" ignore + Target.create "apickpack" ignore + Target.create "adherer" ignore + Target.create "injected" ignore + Target.create "panmixias" ignore + Target.create "Jenkinson" ignore + Target.create "orchiocele" ignore + Target.create "beesting" ignore + Target.create "baratheas" ignore + Target.create "hydrolatry" ignore + Target.create "enormities" ignore + Target.create "trunkback" ignore + Target.create "poddish" ignore + Target.create "nonresponsible" ignore + Target.create "litotic" ignore + Target.create "Sims" ignore + Target.create "Aaru" ignore + Target.create "potto" ignore + Target.create "adenocarcinomas" ignore + Target.create "hyperpersonal" ignore + Target.create "mesioincisal" ignore + Target.create "pickler" ignore + Target.create "viscerate" ignore + Target.create "isologues" ignore + Target.create "peptidoglycan" ignore + Target.create "contrivement" ignore + Target.create "yawnproof" ignore + Target.create "draffish" ignore + Target.create "Vietcong" ignore + Target.create "self-gratulation" ignore + Target.create "baronetizing" ignore + Target.create "surrendry" ignore + Target.create "rhyacolite" ignore + Target.create "quicksilvers" ignore + Target.create "clingstones" ignore + Target.create "valvelets" ignore + Target.create "paleologist" ignore + Target.create "catacoustics" ignore + Target.create "marlinespike" ignore + Target.create "reinsertions" ignore + Target.create "verruculose" ignore + Target.create "mobilizable" ignore + Target.create "consonantalize" ignore + Target.create "withgate" ignore + Target.create "milage" ignore + Target.create "splurgiest" ignore + Target.create "lords-in-waiting" ignore + Target.create "numbnesses" ignore + Target.create "grovy" ignore + Target.create "Nixa" ignore + Target.create "piques" ignore + Target.create "snubs" ignore + Target.create "leered" ignore + Target.create "Latium" ignore + Target.create "caranda" ignore + Target.create "mediatise" ignore + Target.create "erichtoid" ignore + Target.create "rangelands" ignore + Target.create "ichthyol." ignore + Target.create "Pro-kansan" ignore + Target.create "noninheritability" ignore + Target.create "breadroot" ignore + Target.create "petro-" ignore + Target.create "Callipus" ignore + Target.create "begnawn" ignore + Target.create "sclerodactylia" ignore + Target.create "ungeuntarium" ignore + Target.create "muensters" ignore + Target.create "cometography" ignore + Target.create "Luigino" ignore + Target.create "glorified" ignore + Target.create "earth-nut" ignore + Target.create "rubine" ignore + Target.create "FAR" ignore + Target.create "hagioscopic" ignore + Target.create "formicarian" ignore + Target.create "ever-strong" ignore + Target.create "hyeniform" ignore + Target.create "appearer" ignore + Target.create "Danelage" ignore + Target.create "Nicktown" ignore + Target.create "exasperating" ignore + Target.create "Maxa" ignore + Target.create "overanalyze" ignore + Target.create "Gohila" ignore + Target.create "semi-aridity" ignore + Target.create "Arthrobacter" ignore + Target.create "weaving" ignore + Target.create "psychologist's" ignore + Target.create "hastily" ignore + Target.create "papyrographic" ignore + Target.create "unfix" ignore + Target.create "allegresse" ignore + Target.create "formats" ignore + Target.create "hydrosulphocyanic" ignore + Target.create "parlante" ignore + Target.create "mnemonicalist" ignore + Target.create "conspiratorially" ignore + Target.create "jaspis" ignore + Target.create "Quezaltenango" ignore + Target.create "contin" ignore + Target.create "amorphi" ignore + Target.create "Chaetopoda" ignore + Target.create "codline" ignore + Target.create "Aldermaston" ignore + Target.create "hypermoralistic" ignore + Target.create "voter" ignore + Target.create "cowshed" ignore + Target.create "explorator" ignore + Target.create "Kovrov" ignore + Target.create "Mulvihill" ignore + Target.create "Esra" ignore + Target.create "fleecer" ignore + Target.create "mischio" ignore + Target.create "synactic" ignore + Target.create "hepatectomies" ignore + Target.create "thoracoabdominal" ignore + Target.create "senachie" ignore + Target.create "prefearful" ignore + Target.create "compresent" ignore + Target.create "shillings" ignore + Target.create "cubitoplantar" ignore + Target.create "Shirlie" ignore + Target.create "Lookeba" ignore + Target.create "ornithologic" ignore + Target.create "Billye" ignore + Target.create "subtetanic" ignore + Target.create "outargued" ignore + Target.create "illiberalized" ignore + Target.create "Heptanesian" ignore + Target.create "ITT" ignore + Target.create "uninnocent" ignore + Target.create "empty-looking" ignore + Target.create "rough-hackled" ignore + Target.create "vined" ignore + Target.create "arthropodan" ignore + Target.create "purpurean" ignore + Target.create "hypercholesterolemia" ignore + Target.create "Georgi" ignore + Target.create "rain-dropping" ignore + Target.create "outdoorness" ignore + Target.create "conflagrating" ignore + Target.create "brauna" ignore + Target.create "eelpot" ignore + Target.create "Heteroousian" ignore + Target.create "unmarvellously" ignore + Target.create "flywinch" ignore + Target.create "Saone" ignore + Target.create "biocatalytic" ignore + Target.create "Pannini" ignore + Target.create "nitta" ignore + Target.create "refreshener" ignore + Target.create "beshouts" ignore + Target.create "diphen-" ignore + Target.create "Andrej" ignore + Target.create "druggeries" ignore + Target.create "Senora" ignore + Target.create "incapsulation" ignore + Target.create "All" ignore + + "Aaru" <== ["begnawn"; "draffish"; "ichthyol."; "interproximate"; "relacing"] + "Aldermaston" <== ["Vietcong"; "exasperating"; "glorified"; "mediatise"; "muensters"; "ungeuntarium"] + "Andrej" <== ["Kovrov"; "beesting"; "caranda"; "cometography"; "exasperating"; "mediatise"; "ungeuntarium"] + "Arthrobacter" <== ["Heteroousian"; "Latium"; "Vietcong"; "begnawn"; "ichthyol."; "interproximate"; "jaspis"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"] + "Bersil" <== ["Vietcong"; "beesting"; "begnawn"; "ichthyol."; "interproximate"; "pettings"; "ungeuntarium"] + "Billye" <== ["exasperating"; "mediatise"; "pro-Elizabethan"; "weaving"] + "Callipus" <== ["Latium"; "exasperating"; "glorified"; "horsepower-year"; "mediatise"; "muensters"; "ungeuntarium"] + "Chaetopoda" <== ["Latium"; "comparableness"; "exasperating"; "matriarches"; "mediatise"] + "Danelage" <== ["Lookeba"; "begnawn"; "relacing"] + "Esra" <== ["Latium"; "Vietcong"; "comparableness"; "exasperating"; "glorified"; "mediatise"; "muensters"; "ungeuntarium"] + "FAR" <== ["Latium"; "exasperating"; "horsepower-year"; "mnemonicalist"; "senachie"; "ungeuntarium"] + "Georgi" <== ["Latium"; "Vietcong"; "comparableness"; "compresent"; "exasperating"; "glorified"; "horsepower-year"; "hypozoic"; "mediatise"; "muensters"; "shillings"; "ungeuntarium"] + "Gohila" <== ["Latium"; "Vietcong"; "beesting"; "begnawn"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "mnemonicalist"; "pickler"; "relacing"; "ungeuntarium"; "uninnocent"; "vined"] + "Heptanesian" <== ["clingstones"; "exasperating"; "mediatise"; "ungeuntarium"] + "Heteroousian" <== ["begnawn"; "comparableness"; "exasperating"; "mediatise"; "mediatise"; "relacing"] + "ITT" <== ["exasperating"; "mnemonicalist"; "quincunx"] + "Jenkinson" <== ["Latium"; "exasperating"; "mediatise"; "pro-Elizabethan"] + "Kovrov" <== ["beesting"; "cometography"; "exasperating"; "mediatise"; "mesioincisal"; "ungeuntarium"] + "Latium" <== ["Vietcong"; "beshouts"; "cometography"; "comparableness"; "exasperating"; "hypercholesterolemia"; "mediatise"; "ungeuntarium"; "ungeuntarium"; "weaving"] + "Lookeba" <== ["Vietcong"; "aguamas"; "begnawn"; "cometography"; "demasculinize"; "ichthyol."; "interproximate"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"; "wen"] + "Luigino" <== ["Latium"; "Vietcong"; "adherer"; "cometography"; "exasperating"; "glorified"; "glorified"; "horsepower-year"; "hypozoic"; "mediatise"; "muensters"; "ungeuntarium"] + "Maxa" <== ["Arthrobacter"; "begnawn"; "ichthyol."; "interproximate"; "jaspis"; "mediatise"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"] + "Merrie" <== ["Latium"; "exasperating"; "glorified"; "matriarches"; "mediatise"] + "Mulvihill" <== ["Lookeba"; "Phascum"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "ichthyol."; "interproximate"; "pro-Elizabethan"; "relacing"; "ungeuntarium"] + "Nicktown" <== ["begnawn"; "conflagrating"] + "Nixa" <== ["Latium"; "Vietcong"; "exasperating"; "horsepower-year"; "matriarches"; "mediatise"; "micrometeorite"; "senachie"; "ungeuntarium"] + "Pannini" <== ["Heteroousian"; "Heteroousian"; "begnawn"; "interproximate"; "jaspis"; "relacing"; "relacing"] + "Peosta" <== ["Lookeba"; "Mulvihill"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "interproximate"; "outdoorness"; "rain-dropping"; "relacing"; "ungeuntarium"] + "Phascum" <== ["Arthrobacter"; "beesting"; "begnawn"; "exasperating"; "ichthyol."; "interproximate"; "matriarches"; "mediatise"; "outargued"; "relacing"; "surrendry"; "ungeuntarium"] + "Pro-kansan" <== ["Arthrobacter"; "Latium"; "Vietcong"; "begnawn"; "hepatectomies"; "hypercholesterolemia"; "ichthyol."; "jaspis"; "relacing"; "ungeuntarium"] + "Quezaltenango" <== ["Latium"; "beesting"; "compresent"; "exasperating"; "glorified"; "horsepower-year"; "marlinespike"; "mediatise"; "ungeuntarium"; "weaving"] + "Saone" <== ["exasperating"] + "Senora" <== ["Latium"; "comparableness"; "exasperating"; "glorified"; "horsepower-year"; "mediatise"; "muensters"; "senachie"; "ungeuntarium"] + "Shirlie" <== ["Latium"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "glorified"; "horsepower-year"; "interproximate"; "jaspis"; "leered"; "mnemonicalist"; "muensters"; "nonlicentiousness"; "ornithologic"; "purpurean"; "snubs"; "surrendry"; "ungeuntarium"] + "Sims" <== ["Latium"; "Luigino"; "Vietcong"; "druggeries"; "glorified"; "interproximate"; "ungeuntarium"] + "Stalk" <== ["Latium"; "Phascum"; "Vietcong"; "adherer"; "beesting"; "begnawn"; "cometography"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "leered"; "mnemonicalist"; "muensters"; "outdoorness"; "poddish"; "quicksilvers"; "relacing"; "semi-aridity"; "ungeuntarium"] + "Takhaar" <== ["interproximate"] + "Vietcong" <== ["exasperating"; "mediatise"] + "adenocarcinomas" <== ["Latium"; "Vietcong"; "glorified"; "horsepower-year"; "hypozoic"; "ichthyol."; "mnemonicalist"; "quicksilvers"; "ungeuntarium"; "valvelets"] + "adherer" <== ["Latium"; "Vietcong"; "comparableness"; "exasperating"; "glorified"; "horsepower-year"; "mediatise"; "ungeuntarium"] + "allegresse" <== ["Latium"; "Vietcong"; "exasperating"; "horsepower-year"; "mediatise"; "mnemonicalist"; "ungeuntarium"] + "amorphi" <== ["begnawn"; "weaving"; "weaving"] + "apickpack" <== ["Arthrobacter"; "Heteroousian"; "Latium"; "Lookeba"; "Phascum"; "Vietcong"; "aguamas"; "beesting"; "begnawn"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "matriarches"; "milage"; "mnemonicalist"; "muensters"; "relacing"; "rubine"; "surrendry"; "unfix"; "ungeuntarium"; "valvelets"; "wen"] + "appearer" <== ["Latium"; "Lookeba"; "Luigino"; "Vietcong"; "begnawn"; "draffish"; "ever-strong"; "glorified"; "horsepower-year"; "hypercholesterolemia"; "ichthyol."; "interproximate"; "leered"; "mnemonicalist"; "muensters"; "papyrographic"; "relacing"; "surrendry"; "ungeuntarium"; "valvelets"] + "archeal" <== ["Latium"; "Vietcong"; "begnawn"; "glorified"; "horsepower-year"; "interproximate"; "jaspis"; "muensters"; "relacing"; "ungeuntarium"] + "arthropodan" <== ["Latium"; "Vietcong"; "exasperating"; "horsepower-year"; "mediatise"; "mnemonicalist"; "ungeuntarium"] + "baratheas" <== ["Latium"; "Stalk"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "glorified"; "illiberalized"; "interproximate"; "leered"; "muensters"; "outdoorness"; "poddish"; "purpurean"; "snubs"; "ungeuntarium"] + "baronetizing" <== ["Vietcong"; "begnawn"; "cometography"; "hepatectomies"; "interproximate"; "relacing"; "ungeuntarium"] + "beesting" <== ["Lookeba"; "Vietcong"; "cometography"; "comparableness"; "draffish"; "exasperating"; "horsepower-year"; "marlinespike"; "mediatise"; "pro-Elizabethan"; "reinsertions"; "reinsertions"; "ungeuntarium"] + "begnawn" <== ["Saone"; "exasperating"] + "beshouts" <== ["exasperating"; "mediatise"] + "biocatalytic" <== ["Latium"; "beesting"; "cometography"; "exasperating"; "marlinespike"; "mediatise"; "ungeuntarium"] + "brauna" <== ["Saone"; "exasperating"] + "breadroot" <== ["Arthrobacter"; "Vietcong"; "begnawn"; "druggeries"; "ichthyol."; "interproximate"; "jaspis"; "relacing"; "surrendry"; "ungeuntarium"] + "caranda" <== ["beesting"; "cometography"; "exasperating"; "marlinespike"; "marlinespike"; "mediatise"; "ungeuntarium"] + "carp-" <== ["Latium"; "Vietcong"; "exasperating"; "mediatise"; "ungeuntarium"] + "catacoustics" <== ["exasperating"; "hastily"; "mediatise"; "mnemonicalist"; "muensters"; "papyrographic"] + "clingstones" <== ["comparableness"; "exasperating"; "mediatise"; "ungeuntarium"] + "coadjute" <== ["Latium"; "Vietcong"; "exasperating"; "mediatise"; "mnemonicalist"; "ungeuntarium"] + "codline" <== ["Latium"; "Vietcong"; "begnawn"; "glorified"; "hydrosulphocyanic"; "interproximate"; "leered"; "muensters"; "pickler"; "relacing"; "ungeuntarium"] + "collection" <== ["exasperating"; "glorified"; "mediatise"; "muensters"; "shillings"; "ungeuntarium"] + "comparableness" <== ["exasperating"; "mediatise"; "peptidoglycan"] + "compresent" <== ["Latium"; "Vietcong"; "comparableness"; "exasperating"; "mediatise"; "peptidoglycan"; "ungeuntarium"] + "consonantalize" <== ["Phascum"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "ichthyol."; "interproximate"; "outargued"; "relacing"; "surrendry"; "ungeuntarium"] + "conspiratorially" <== ["begnawn"; "druggeries"; "hepatectomies"; "interproximate"; "relacing"] + "contin" <== ["exasperating"; "mnemonicalist"; "ungeuntarium"] + "contrivement" <== ["Vietcong"; "exasperating"; "mediatise"; "mnemonicalist"; "ungeuntarium"] + "cowshed" <== ["Vietcong"; "beesting"; "begnawn"; "cometography"; "exasperating"; "interproximate"; "mediatise"; "rain-dropping"; "relacing"; "ungeuntarium"] + "cubitoplantar" <== ["Vietcong"; "beesting"; "exasperating"; "glorified"; "hypozoic"; "mediatise"; "muensters"; "ungeuntarium"; "ungeuntarium"] + "demasculinize" <== ["aguamas"; "wen"] + "diphen-" <== ["Latium"; "Luigino"; "Mulvihill"; "Mulvihill"; "Vietcong"; "beesting"; "cometography"; "compresent"; "exasperating"; "glorified"; "horsepower-year"; "hypozoic"; "matriarches"; "mediatise"; "muensters"; "soundless"; "ungeuntarium"] + "draffish" <== ["Lookeba"; "Vietcong"; "begnawn"; "cometography"; "ichthyol."; "interproximate"; "relacing"; "rubine"; "ungeuntarium"] + "druggeries" <== ["begnawn"; "ichthyol."; "interproximate"; "relacing"] + "earth-nut" <== ["exasperating"; "lords-in-waiting"; "mediatise"] + "eelpot" <== ["begnawn"; "cometography"; "relacing"] + "empty-looking" <== ["Arthrobacter"; "Heteroousian"; "Latium"; "Vietcong"; "begnawn"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "mnemonicalist"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"] + "enormities" <== ["Arthrobacter"; "Latium"; "Lookeba"; "Mulvihill"; "Phascum"; "Vietcong"; "aguamas"; "beesting"; "begnawn"; "demasculinize"; "glorified"; "horsepower-year"; "hypercholesterolemia"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "mnemonicalist"; "muensters"; "pickler"; "relacing"; "surrendry"; "trunkback"; "ungeuntarium"; "valvelets"; "wen"] + "erichtoid" <== ["Latium"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "glorified"; "interproximate"; "leered"; "muensters"; "poddish"; "purpurean"; "snubs"; "ungeuntarium"] + "ever-strong" <== ["Arthrobacter"; "Bersil"; "Latium"; "Lookeba"; "Phascum"; "Vietcong"; "beesting"; "begnawn"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "jaspis"; "mnemonicalist"; "muensters"; "pettings"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"; "valvelets"] + "exasperating" <== ["cometography"; "rhyacolite"] + "explorator" <== ["Arthrobacter"; "Vietcong"; "begnawn"; "ichthyol."; "mediatise"; "relacing"; "surrendry"; "ungeuntarium"; "valvelets"] + "fleecer" <== ["Latium"; "exasperating"; "mnemonicalist"; "ungeuntarium"] + "flywinch" <== ["Heteroousian"; "Latium"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "glorified"; "horsepower-year"; "interproximate"; "leered"; "mnemonicalist"; "muensters"; "ornithologic"; "snubs"; "ungeuntarium"] + "formats" <== ["Latium"; "Phascum"; "Stalk"; "Vietcong"; "adherer"; "beesting"; "begnawn"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "leered"; "mnemonicalist"; "muensters"; "outdoorness"; "quicksilvers"; "relacing"; "semi-aridity"; "ungeuntarium"] + "formicarian" <== ["exasperating"; "mediatise"; "mnemonicalist"; "muensters"; "papyrographic"; "shillings"] + "glorified" <== ["Latium"; "Vietcong"; "cometography"; "cometography"; "comparableness"; "exasperating"; "horsepower-year"; "matriarches"; "mediatise"; "pro-Elizabethan"; "reinsertions"; "senachie"; "ungeuntarium"] + "grovy" <== ["Georgi"; "exasperating"; "glorified"; "hastily"; "mediatise"; "mnemonicalist"; "muensters"; "shillings"; "soundless"; "ungeuntarium"] + "hagioscopic" <== ["exasperating"] + "hastily" <== ["Georgi"; "Vietcong"; "collection"; "exasperating"; "glorified"; "mediatise"; "muensters"; "quincunx"; "shillings"] + "hepatectomies" <== ["begnawn"; "exasperating"; "exasperating"; "relacing"] + "hollowroot" <== ["exasperating"] + "horsepower-year" <== ["Latium"; "Vietcong"; "exasperating"; "matriarches"; "mediatise"; "mnemonicalist"; "ungeuntarium"; "viscerate"] + "hydrachnid" <== ["synactic"] + "hydrolatry" <== ["Latium"; "Saone"; "Stalk"; "Vietcong"; "beesting"; "begnawn"; "compresent"; "druggeries"; "glorified"; "interproximate"; "leered"; "mnemonicalist"; "muensters"; "outdoorness"; "papyrographic"; "poddish"; "purpurean"; "snubs"; "ungeuntarium"] + "hydrosulphocyanic" <== ["Latium"; "Luigino"; "Vietcong"; "adherer"; "begnawn"; "glorified"; "horsepower-year"; "interproximate"; "leered"; "mnemonicalist"; "muensters"; "quicksilvers"; "relacing"; "surrendry"; "ungeuntarium"] + "hyeniform" <== ["Latium"; "Vietcong"; "exasperating"; "mnemonicalist"; "ungeuntarium"] + "hypercholesterolemia" <== ["Vietcong"; "begnawn"; "cometography"; "interproximate"; "relacing"; "surrendry"; "ungeuntarium"] + "hypermoralistic" <== ["clingstones"; "exasperating"; "mediatise"; "ungeuntarium"] + "hyperpersonal" <== ["Lookeba"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "draffish"; "ichthyol."; "interproximate"; "relacing"; "surrendry"; "ungeuntarium"] + "hypozoic" <== ["Latium"; "exasperating"; "glorified"; "muensters"; "ungeuntarium"] + "ichthyol." <== ["Vietcong"; "begnawn"; "cometography"; "interproximate"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"] + "illiberalized" <== ["Phascum"; "Stalk"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "formats"; "ichthyol."; "interproximate"; "outdoorness"; "relacing"; "semi-aridity"; "ungeuntarium"] + "incapsulation" <== ["Latium"; "Stalk"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "formats"; "glorified"; "hydrolatry"; "interproximate"; "leered"; "muensters"; "outdoorness"; "purpurean"; "quicksilvers"; "snubs"; "ungeuntarium"] + "injected" <== ["Latium"; "Vietcong"; "amorphi"; "amorphi"; "begnawn"; "glorified"; "interproximate"; "leered"; "relacing"; "surrendry"; "trunkback"; "ungeuntarium"] + "interproximate" <== ["Vietcong"; "begnawn"; "cometography"; "hepatectomies"; "relacing"; "semi-aridity"; "surrendry"; "ungeuntarium"] + "isologues" <== ["Vietcong"; "comparableness"; "exasperating"; "mediatise"] + "jaspis" <== ["Heteroousian"; "Latium"; "Vietcong"; "begnawn"; "hepatectomies"; "ichthyol."; "interproximate"; "matriarches"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"] + "kaw-" <== ["Arthrobacter"; "Latium"; "Vietcong"; "begnawn"; "druggeries"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "mnemonicalist"; "muensters"; "surrendry"; "ungeuntarium"; "valvelets"] + "komatiks" <== ["comparableness"; "exasperating"; "mediatise"] + "leered" <== ["Latium"; "Vietcong"; "amorphi"; "beesting"; "begnawn"; "cometography"; "glorified"; "hepatectomies"; "horsepower-year"; "interproximate"; "jaspis"; "mnemonicalist"; "muensters"; "relacing"; "surrendry"; "ungeuntarium"] + "litotic" <== ["exasperating"; "mediatise"; "mnemonicalist"; "papyrographic"] + "lords-in-waiting" <== ["Latium"; "Vietcong"; "compresent"; "exasperating"; "mediatise"; "peptidoglycan"; "ungeuntarium"] + "marlinespike" <== ["Danelage"; "Lookeba"; "exasperating"; "mediatise"; "ungeuntarium"] + "matriarches" <== ["Latium"; "Vietcong"; "comparableness"; "comparableness"; "compresent"; "exasperating"; "lords-in-waiting"; "mediatise"; "ungeuntarium"] + "mediatise" <== ["brauna"; "exasperating"] + "mesioincisal" <== ["Latium"; "Vietcong"; "beesting"; "clingstones"; "cometography"; "comparableness"; "compresent"; "earth-nut"; "exasperating"; "jaspis"; "lords-in-waiting"; "marlinespike"; "matriarches"; "mediatise"; "ungeuntarium"] + "micrometeorite" <== ["Latium"; "exasperating"; "horsepower-year"; "mediatise"; "senachie"; "ungeuntarium"] + "milage" <== ["Latium"; "beesting"; "cometography"; "exasperating"; "glorified"; "marlinespike"; "mediatise"; "muensters"; "ungeuntarium"] + "mischio" <== ["Latium"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "glorified"; "horsepower-year"; "interproximate"; "leered"; "mesioincisal"; "mnemonicalist"; "purpurean"; "snubs"; "surrendry"; "ungeuntarium"] + "mnemonicalist" <== ["Latium"; "Latium"; "exasperating"; "exasperating"; "ungeuntarium"] + "mobilizable" <== ["Phascum"; "Vietcong"; "beesting"; "begnawn"; "ichthyol."; "pickler"; "relacing"; "ungeuntarium"; "yawnproof"] + "muensters" <== ["Latium"; "Vietcong"; "compresent"; "exasperating"; "glorified"; "horsepower-year"; "matriarches"; "mediatise"; "ungeuntarium"] + "nitta" <== ["Latium"; "Lookeba"; "Peosta"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "druggeries"; "glorified"; "interproximate"; "leered"; "outdoorness"; "purpurean"; "snubs"; "surrendry"; "ungeuntarium"] + "noninheritability" <== ["Latium"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "glorified"; "horsepower-year"; "interproximate"; "jaspis"; "leered"; "mnemonicalist"; "muensters"; "purpurean"; "quicksilvers"; "snubs"; "surrendry"; "ungeuntarium"] + "nonlicentiousness" <== ["Latium"; "Quezaltenango"; "Vietcong"; "beesting"; "compresent"; "glorified"; "ungeuntarium"] + "nonresponsible" <== ["Saone"; "begnawn"] + "nonsubjectiveness" <== ["begnawn"] + "numbnesses" <== ["begnawn"; "ichthyol."; "interproximate"; "relacing"; "surrendry"; "ungeuntarium"] + "ondogram" <== ["Latium"; "exasperating"; "glorified"; "horsepower-year"; "mediatise"; "ungeuntarium"] + "orchiocele" <== ["beesting"; "cometography"; "exasperating"; "marlinespike"; "mediatise"] + "ornithologic" <== ["Latium"; "Quezaltenango"; "Vietcong"; "beesting"; "begnawn"; "glorified"; "nonlicentiousness"; "relacing"; "ungeuntarium"] + "outargued" <== ["Vietcong"; "beesting"; "begnawn"; "interproximate"; "mediatise"; "relacing"; "ungeuntarium"] + "outdoorness" <== ["Latium"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "glorified"; "ichthyol."; "interproximate"; "leered"; "semi-aridity"; "trunkback"; "ungeuntarium"] + "outgreen" <== ["Latium"; "Phascum"; "Vietcong"; "beesting"; "begnawn"; "druggeries"; "ichthyol."; "interproximate"; "matriarches"; "snubs"; "ungeuntarium"] + "overanalyze" <== ["comparableness"; "exasperating"; "mediatise"; "uninnocent"] + "paleologist" <== ["Vietcong"; "begnawn"; "ichthyol."; "interproximate"; "jaspis"; "pro-Elizabethan"; "relacing"; "ungeuntarium"] + "panmixias" <== ["Latium"; "Vietcong"; "exasperating"; "mediatise"] + "papyrographic" <== ["Latium"; "Vietcong"; "exasperating"; "mediatise"; "mnemonicalist"; "ungeuntarium"] + "parlante" <== ["Arthrobacter"; "Lookeba"; "begnawn"; "draffish"; "ichthyol."; "jaspis"; "relacing"; "rubine"] + "peptidoglycan" <== ["exasperating"; "exasperating"] + "petro-" <== ["Andrej"; "Billye"; "Callipus"; "Chaetopoda"; "FAR"; "ITT"; "Jenkinson"; "Kovrov"; "Merrie"; "Nixa"; "Senora"; "caranda"; "catacoustics"; "coadjute"; "cometography"; "contin"; "exasperating"; "fleecer"; "formicarian"; "grovy"; "hagioscopic"; "hyeniform"; "isologues"; "litotic"; "mediatise"; "mnemonicalist"; "muensters"; "orchiocele"; "overanalyze"; "papyrographic"; "refreshener"; "sclerodactylia"; "splurgiest"; "subtetanic"; "swiftest"; "thoracoabdominal"; "uninnocent"; "unmarvellously"; "unquestioningly"; "vined"; "withgate"] + "pettings" <== ["Arthrobacter"; "Heteroousian"; "Latium"; "Phascum"; "Vietcong"; "beesting"; "begnawn"; "begnawn"; "cometography"; "glorified"; "horsepower-year"; "hypercholesterolemia"; "ichthyol."; "ichthyol."; "interproximate"; "interproximate"; "jaspis"; "jaspis"; "mnemonicalist"; "muensters"; "paleologist"; "relacing"; "relacing"; "rubine"; "rubine"; "surrendry"; "ungeuntarium"] + "pickler" <== ["Arthrobacter"; "Latium"; "Phascum"; "Vietcong"; "beesting"; "begnawn"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "mnemonicalist"; "muensters"; "relacing"; "relacing"; "surrendry"; "ungeuntarium"; "uninnocent"] + "piperidine" <== ["Latium"; "Vietcong"; "begnawn"; "begnawn"; "cometography"; "cometography"; "compresent"; "glorified"; "hepatectomies"; "horsepower-year"; "ichthyol."; "interproximate"; "interproximate"; "mnemonicalist"; "muensters"; "quicksilvers"; "relacing"; "relacing"; "rubine"; "surrendry"; "surrendry"; "ungeuntarium"] + "piques" <== ["begnawn"; "interproximate"; "nonsubjectiveness"; "relacing"] + "poddish" <== ["Latium"; "Vietcong"; "adherer"; "beesting"; "begnawn"; "glorified"; "horsepower-year"; "hypercholesterolemia"; "ichthyol."; "interproximate"; "leered"; "mnemonicalist"; "muensters"; "quicksilvers"; "relacing"; "ungeuntarium"] + "potto" <== ["Phascum"; "begnawn"; "ichthyol."; "interproximate"; "leered"; "relacing"] + "prefearful" <== ["comparableness"; "exasperating"; "komatiks"; "ungeuntarium"] + "pro-Elizabethan" <== ["Vietcong"; "begnawn"; "hepatectomies"; "ichthyol."; "interproximate"; "relacing"; "ungeuntarium"] + "psychologist's" <== ["Arthrobacter"; "Vietcong"; "begnawn"; "ichthyol."; "mediatise"; "relacing"; "surrendry"; "valvelets"] + "purpurean" <== ["Arthrobacter"; "Arthrobacter"; "Heteroousian"; "Latium"; "Lookeba"; "Mulvihill"; "Phascum"; "Quezaltenango"; "Vietcong"; "archeal"; "beesting"; "begnawn"; "cometography"; "ever-strong"; "glorified"; "hepatectomies"; "horsepower-year"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "leered"; "muensters"; "outargued"; "pro-Elizabethan"; "relacing"; "rubine"; "self-gratulation"; "surrendry"; "unfix"; "ungeuntarium"; "valvelets"] + "quicksilvers" <== ["Arthrobacter"; "Heteroousian"; "Latium"; "Lookeba"; "Phascum"; "Saone"; "Vietcong"; "adherer"; "aguamas"; "apickpack"; "beesting"; "begnawn"; "cometography"; "ever-strong"; "exasperating"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "mediatise"; "mnemonicalist"; "muensters"; "papyrographic"; "relacing"; "surrendry"; "ungeuntarium"; "valvelets"; "wen"] + "quincunx" <== ["Vietcong"; "exasperating"; "mediatise"] + "rain-dropping" <== ["beesting"; "cometography"; "exasperating"; "mediatise"] + "rangelands" <== ["cometography"] + "refreshener" <== ["Aldermaston"; "Esra"; "Georgi"; "Luigino"; "allegresse"; "arthropodan"; "collection"; "cubitoplantar"; "exasperating"; "glorified"; "hastily"; "mediatise"; "panmixias"; "shillings"; "soundless"; "terroristic"; "ungeuntarium"] + "relacing" <== ["Vietcong"; "begnawn"; "exasperating"; "mediatise"] + "rough-hackled" <== ["begnawn"; "interproximate"; "jaspis"; "nonsubjectiveness"; "piques"; "relacing"] + "rubine" <== ["begnawn"; "interproximate"; "relacing"] + "sclerodactylia" <== ["comparableness"; "compresent"; "exasperating"; "mediatise"] + "self-gratulation" <== ["Vietcong"; "begnawn"; "ungeuntarium"] + "senachie" <== ["Latium"; "Vietcong"; "beshouts"; "comparableness"; "exasperating"; "horsepower-year"; "matriarches"; "mediatise"; "mnemonicalist"; "papyrographic"; "prefearful"; "ungeuntarium"] + "shillings" <== ["Latium"; "exasperating"; "glorified"; "horsepower-year"; "hypozoic"; "mediatise"; "muensters"; "ungeuntarium"] + "snubs" <== ["Latium"; "Lookeba"; "Mulvihill"; "Phascum"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "cubitoplantar"; "druggeries"; "glorified"; "horsepower-year"; "interproximate"; "mesioincisal"; "mnemonicalist"; "muensters"; "papyrographic"; "ungeuntarium"] + "soundless" <== ["Latium"; "Vietcong"; "comparableness"; "exasperating"; "glorified"; "horsepower-year"; "hypozoic"; "lords-in-waiting"; "matriarches"; "mediatise"; "muensters"; "shillings"; "ungeuntarium"] + "splurgiest" <== ["exasperating"; "mediatise"] + "subarytenoidal" <== ["Vietcong"; "beesting"; "biocatalytic"; "druggeries"; "ever-strong"; "ichthyol."; "snubs"; "ungeuntarium"] + "subtetanic" <== ["Georgi"; "exasperating"; "mediatise"; "mnemonicalist"] + "surrendry" <== ["Vietcong"; "begnawn"; "cometography"; "relacing"; "ungeuntarium"] + "swiftest" <== ["Latium"; "Vietcong"; "beshouts"; "exasperating"; "glorified"; "horsepower-year"; "mediatise"; "muensters"; "ungeuntarium"] + "synactic" <== ["begnawn"; "conflagrating"; "interproximate"] + "terroristic" <== ["Kovrov"; "Vietcong"; "beesting"; "cometography"; "diphen-"; "exasperating"; "mediatise"; "mesioincisal"] + "thoracoabdominal" <== ["collection"; "exasperating"; "mediatise"; "papyrographic"] + "trunkback" <== ["Latium"; "Vietcong"; "begnawn"; "glorified"; "horsepower-year"; "interproximate"; "leered"; "mnemonicalist"; "ungeuntarium"] + "unfix" <== ["Arthrobacter"; "Heteroousian"; "Latium"; "Vietcong"; "beesting"; "begnawn"; "cometography"; "ever-strong"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "mediatise"; "mnemonicalist"; "muensters"; "relacing"; "rubine"; "ungeuntarium"; "valvelets"] + "ungeuntarium" <== ["Vietcong"; "cometography"; "cometography"; "exasperating"; "mediatise"] + "uninnocent" <== ["Latium"; "Vietcong"; "beesting"; "cometography"; "comparableness"; "exasperating"; "glorified"; "horsepower-year"; "hypozoic"; "jaspis"; "marlinespike"; "matriarches"; "mediatise"; "muensters"; "numbnesses"; "soundless"; "ungeuntarium"] + "unmarvellously" <== ["exasperating"; "mediatise"] + "unquestioningly" <== ["comparableness"; "exasperating"; "mediatise"; "peptidoglycan"] + "unslashed" <== ["Takhaar"; "Vietcong"; "begnawn"; "druggeries"; "exasperating"; "interproximate"; "ungeuntarium"] + "valvelets" <== ["Arthrobacter"; "Latium"; "Lookeba"; "Luigino"; "Phascum"; "Saone"; "Vietcong"; "beesting"; "begnawn"; "glorified"; "horsepower-year"; "hypercholesterolemia"; "ichthyol."; "interproximate"; "jaspis"; "leered"; "muensters"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"] + "verruculose" <== ["Vietcong"; "begnawn"; "druggeries"; "glorified"; "interproximate"; "muensters"; "trunkback"; "ungeuntarium"] + "vined" <== ["Latium"; "Vietcong"; "beesting"; "cometography"; "comparableness"; "exasperating"; "glorified"; "horsepower-year"; "hypozoic"; "mediatise"; "mnemonicalist"; "muensters"; "ungeuntarium"; "uninnocent"] + "viscerate" <== ["exasperating"; "mediatise"] + "voter" <== ["begnawn"; "ichthyol."; "interproximate"; "outdoorness"; "ungeuntarium"] + "weaving" <== ["exasperating"] + "wen" <== ["aguamas"] + "white-bosomed" <== ["Vietcong"; "begnawn"; "druggeries"; "hypercholesterolemia"; "interproximate"; "ungeuntarium"] + "withgate" <== ["Bersil"; "Lookeba"; "Mulvihill"; "Phascum"; "Quezaltenango"; "Quezaltenango"; "beesting"; "begnawn"; "caranda"; "cometography"; "empty-looking"; "exasperating"; "ichthyol."; "interproximate"; "marlinespike"; "mediatise"; "paleologist"; "ungeuntarium"; "voter"] + "yawnproof" <== ["Arthrobacter"; "Latium"; "Phascum"; "Pro-kansan"; "Vietcong"; "beesting"; "begnawn"; "begnawn"; "glorified"; "horsepower-year"; "ichthyol."; "interproximate"; "interproximate"; "jaspis"; "leered"; "mesioincisal"; "mnemonicalist"; "muensters"; "pickler"; "relacing"; "rubine"; "surrendry"; "ungeuntarium"; "uninnocent"] + + // Add list of targets that nothing depends on + "All" <== ["Aaru"; "Gohila"; "Heptanesian"; "Maxa"; "Nicktown"; "Pannini"; "Shirlie"; "Sims"; "adenocarcinomas"; "appearer"; "baratheas"; "baronetizing"; "breadroot"; "carp-"; "codline"; "consonantalize"; "conspiratorially"; "contrivement"; "cowshed"; "eelpot"; "enormities"; "erichtoid"; "explorator"; "flywinch"; "hollowroot"; "hydrachnid"; "hypermoralistic"; "hyperpersonal"; "incapsulation"; "injected"; "kaw-"; "mischio"; "mobilizable"; "nitta"; "noninheritability"; "nonresponsible"; "ondogram"; "outgreen"; "parlante"; "petro-"; "piperidine"; "potto"; "psychologist's"; "rangelands"; "rough-hackled"; "subarytenoidal"; "unslashed"; "verruculose"; "white-bosomed"] + + let sw = System.Diagnostics.Stopwatch() + sw.Start() + + let order = determineBuildOrder "All" 2 + validateBuildOrder order "All" + + let elapsedSeconds = sw.Elapsed.Seconds + + // This takes a second on my machine. 10 seconds allowed for a buffer + if elapsedSeconds > 10 + then failwithf "Unexpectedly long time to complete (%d seconds); should only take a second" elapsedSeconds + + match order with + | [ + TargetSet [ "aguamas"; "cometography"; "conflagrating"; "reinsertions"; "rhyacolite"; "semi-aridity" ] + TargetSet [ "exasperating"; "rangelands"; "wen" ] + TargetSet [ "Saone"; "demasculinize"; "hagioscopic"; "hollowroot"; "peptidoglycan"; "weaving" ] + TargetSet [ "begnawn"; "brauna" ] + TargetSet [ "Nicktown"; "amorphi"; "mediatise"; "nonresponsible"; "nonsubjectiveness" ] + TargetSet [ "Vietcong"; "beshouts"; "comparableness"; "splurgiest"; "unmarvellously"; "viscerate" ] + TargetSet [ "isologues"; "komatiks"; "quincunx"; "relacing"; "ungeuntarium"; "unquestioningly" ] + TargetSet [ "Heteroousian"; "clingstones"; "eelpot"; "hepatectomies"; "prefearful"; "self-gratulation"; "surrendry" ] + TargetSet [ "Heptanesian"; "hypermoralistic"; "interproximate" ] + TargetSet [ "Takhaar"; "baronetizing"; "hypercholesterolemia"; "piques"; "rubine"; "synactic" ] + TargetSet [ "Latium"; "hydrachnid"; "ichthyol." ] + TargetSet [ "Lookeba"; "carp-"; "compresent"; "druggeries"; "mnemonicalist"; "numbnesses"; "panmixias"; "pro-Elizabethan" ] + TargetSet [ "Billye"; "Danelage"; "ITT"; "Jenkinson"; "coadjute"; "conspiratorially"; "contin"; "contrivement"; "draffish"; "fleecer"; "hyeniform"; "lords-in-waiting"; "papyrographic"; "sclerodactylia"; "unslashed"; "white-bosomed" ] + TargetSet [ "Aaru"; "earth-nut"; "litotic"; "marlinespike"; "matriarches" ] + TargetSet [ "Chaetopoda"; "horsepower-year"; "jaspis" ] + TargetSet [ "Arthrobacter"; "Pannini"; "allegresse"; "arthropodan"; "beesting"; "paleologist"; "rough-hackled"; "senachie" ] + TargetSet [ "FAR"; "Maxa"; "Pro-kansan"; "biocatalytic"; "breadroot"; "caranda"; "glorified"; "hyperpersonal"; "mesioincisal"; "micrometeorite"; "orchiocele"; "outargued"; "parlante"; "rain-dropping" ] + TargetSet [ "Kovrov"; "Merrie"; "Nixa"; "Phascum"; "Quezaltenango"; "adherer"; "cowshed"; "muensters"; "ondogram" ] + TargetSet [ "Aldermaston"; "Andrej"; "Callipus"; "Esra"; "Mulvihill"; "Senora"; "archeal"; "consonantalize"; "hypozoic"; "leered"; "milage"; "nonlicentiousness"; "pettings"; "swiftest" ] + TargetSet [ "Bersil"; "Luigino"; "cubitoplantar"; "empty-looking"; "ornithologic"; "potto"; "shillings"; "trunkback" ] + TargetSet [ "Georgi"; "Sims"; "collection"; "formicarian"; "injected"; "outdoorness"; "snubs"; "soundless"; "valvelets"; "verruculose" ] + TargetSet [ "Peosta"; "diphen-"; "ever-strong"; "explorator"; "flywinch"; "hastily"; "kaw-"; "outgreen"; "psychologist's"; "subtetanic"; "thoracoabdominal"; "uninnocent"; "voter" ] + TargetSet [ "appearer"; "catacoustics"; "grovy"; "overanalyze"; "pickler"; "subarytenoidal"; "terroristic"; "unfix"; "vined"; "withgate" ] + TargetSet [ "Gohila"; "apickpack"; "enormities"; "purpurean"; "refreshener"; "yawnproof" ] + TargetSet [ "Shirlie"; "mischio"; "mobilizable"; "nitta"; "petro-"; "quicksilvers" ] + TargetSet [ "adenocarcinomas"; "hydrosulphocyanic"; "noninheritability"; "piperidine"; "poddish" ] + TargetSet [ "Stalk"; "codline"; "erichtoid" ] + TargetSet [ "formats"; "hydrolatry" ] + TargetSet [ "illiberalized"; "incapsulation" ] + TargetSet [ "baratheas" ] + TargetSet [ "All" ] + ] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" (order |> List.map (Array.map (fun t -> t.Name))) ] @ ( [ From f57a47dff3b0a2e5aacc079f70442cea993b8149 Mon Sep 17 00:00:00 2001 From: Matthias Dittrich Date: Tue, 16 Jul 2019 00:52:56 +0200 Subject: [PATCH 5/6] properly call stop... --- src/test/Fake.Core.UnitTests/Fake.ContextHelper.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/Fake.Core.UnitTests/Fake.ContextHelper.fs b/src/test/Fake.Core.UnitTests/Fake.ContextHelper.fs index 1d95e28d4a5..df3ce89016f 100644 --- a/src/test/Fake.Core.UnitTests/Fake.ContextHelper.fs +++ b/src/test/Fake.Core.UnitTests/Fake.ContextHelper.fs @@ -8,7 +8,7 @@ open System.Diagnostics let time f = let sw = Stopwatch.StartNew() f () - sw.Stop + sw.Stop() sw.Elapsed let withFakeContext name f = From 5c3d1b834f69bf29bd8bbeed6faa6dc5ef4df8e0 Mon Sep 17 00:00:00 2001 From: Matthias Dittrich Date: Tue, 16 Jul 2019 00:58:10 +0200 Subject: [PATCH 6/6] release notes --- RELEASE_NOTES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ed4ef7ee2d9..67603b2a1c2 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,8 +1,8 @@ # Release Notes -## 5.15.4-alpha - tbd +## 5.15.4 - 2019-07-16 -* tbd +* BUGFIX: Fix high memory use and slowness with a large number of targets/dependencies - https://github.com/fsharp/FAKE/pull/2354 ## 5.15.3 - 2019-07-03