Можно ли редактировать свойства в MsBuildWorkspace (roslyn)? - PullRequest
0 голосов
/ 06 февраля 2020

Я хотел бы добавить пару свойств в MsBuildWorkspace, и я попробовал это:

        using (var workspace = MSBuildWorkspace.Create(new Dictionary<string, string>
        {
            ["CopyBuildOutputToOutputDirectory"] = "true",
            ["SkipCopyBuildProduct"] = "false",
            ["DesignTimeBuild"] = "false",
            ["BuildProjectReferences"] = "true",
            ["AutoGenerateBindingRedirects"] = "false",
            ["UseCommonOutputDirectory"] = "false",
            ["SkipCompilerExecution"] = "false"
        }))
        {
            var solution = await workspace.OpenSolutionAsync(solutionPath);
            return solution;
        }

Но это только дает мне:

An element with the same key but a different value already exists. 

Я пытался посмотреть на объект рабочей области после создания, и это ImmutableDictionary. Так что я думаю, они не хотят, чтобы мы меняли определенные c свойства или что-то, чего мне не хватает?

Редактировать с помощью stacktrace:

at System.Collections.Immutable.ImmutableDictionary`2.HashBucket.Add(TKey key, TValue value, IEqualityComparer`1 keyOnlyComparer, IEqualityComparer`1 valueComparer, KeyCollisionBehavior behavior, OperationResult& result)
   at System.Collections.Immutable.ImmutableDictionary`2.AddRange(IEnumerable`1 items, MutationInput origin, KeyCollisionBehavior collisionBehavior)
   at System.Collections.Immutable.ImmutableDictionary`2.AddRange(IEnumerable`1 pairs, Boolean avoidToHashMap)
   at System.Collections.Immutable.ImmutableDictionary`2.AddRange(IEnumerable`1 pairs)
   at Microsoft.CodeAnalysis.MSBuild.Build.ProjectBuildManager.StartBatchBuild(IDictionary`2 globalProperties)
   at Microsoft.CodeAnalysis.MSBuild.MSBuildProjectLoader.Worker.<LoadAsync>d__18.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.MSBuild.MSBuildProjectLoader.<LoadSolutionInfoAsync>d__21.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<OpenSolutionAsync>d__23.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
...