From 932e2ead00719248ce41c4ff51509c81b11bf455 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 04:42:21 +0000 Subject: [PATCH 1/2] Add --msbuild-global-property CLI option for design-time project loading Closes #1057 Closes #1475 Allow users to pass extra MSBuild global properties to the workspace loader via a new --msbuild-global-property (alias --msbuild-prop) CLI flag. Each value is a KEY=VALUE pair; the flag may be specified multiple times. fsautocomplete --msbuild-global-property Configuration=Release \ --msbuild-prop MyCustomProp=1 The parsed pairs are merged with the existing ProjectLoader.globalProperties list and forwarded to both WorkspaceLoader and WorkspaceLoaderViaProjectGraph. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/FsAutoComplete/Parser.fs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/FsAutoComplete/Parser.fs b/src/FsAutoComplete/Parser.fs index 413204194..3efd0f597 100644 --- a/src/FsAutoComplete/Parser.fs +++ b/src/FsAutoComplete/Parser.fs @@ -88,6 +88,15 @@ module Parser = o + let msBuildGlobalPropertyOption = + let o = Option("--msbuild-global-property", "--msbuild-prop") + + o.Description <- + "Add or override an MSBuild global property for design-time project loading. Specify as KEY=VALUE, e.g. --msbuild-global-property Configuration=Release. Can be specified multiple times." + + o.AllowMultipleArgumentsPerToken <- true + o + let stateLocationOption = let o = Option("--state-directory") @@ -111,6 +120,7 @@ module Parser = rootCommand.Options.Add stateLocationOption rootCommand.Options.Add otelTracingOption rootCommand.Options.Add useTransparentCompilerOption + rootCommand.Options.Add msBuildGlobalPropertyOption // for back-compat - we removed some options and this broke some clients. rootCommand.TreatUnmatchedTokensAsErrors <- false @@ -120,12 +130,24 @@ module Parser = let adaptiveLspEnabled = parseResult.GetValue(adaptiveLspServerOption) let useTransparentCompiler = parseResult.GetValue(useTransparentCompilerOption) + let extraMsBuildProperties = + parseResult.GetValue(msBuildGlobalPropertyOption) + |> Option.ofObj + |> Option.defaultValue [||] + |> Array.choose (fun (kv: string) -> + match kv.IndexOf('=') with + | -1 -> None + | i -> Some(kv.[.. i - 1], kv.[i + 1 ..])) + |> Array.toList + let workspaceLoaderFactory = fun toolsPath -> + let properties = ProjectLoader.globalProperties @ extraMsBuildProperties + if projectGraphEnabled then - Ionide.ProjInfo.WorkspaceLoaderViaProjectGraph.Create(toolsPath, ProjectLoader.globalProperties) + Ionide.ProjInfo.WorkspaceLoaderViaProjectGraph.Create(toolsPath, properties) else - Ionide.ProjInfo.WorkspaceLoader.Create(toolsPath, ProjectLoader.globalProperties) + Ionide.ProjInfo.WorkspaceLoader.Create(toolsPath, properties) let sourceTextFactory: ISourceTextFactory = new RoslynSourceTextFactory() From 78942c6e39ebf96b30ff6b89c2fa3f254451ea36 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 8 Apr 2026 04:42:23 +0000 Subject: [PATCH 2/2] ci: trigger checks