Я хотел бы добавить пару свойств в 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()