/// <summary> /// Given a set of task parameters from the UsingTask and from the task invocation, generate a dictionary that combines the two, or throws if the merge /// is impossible (we shouldn't ever get to this point if it is ...) /// </summary> private static IDictionary <string, string> MergeTaskFactoryParameterSets(IDictionary <string, string> factoryIdentityParameters, IDictionary <string, string> taskIdentityParameters) { IDictionary <string, string> mergedParameters = null; string mergedRuntime = null; string mergedArchitecture = null; if (factoryIdentityParameters == null || factoryIdentityParameters.Count == 0) { mergedParameters = new Dictionary <string, string>(taskIdentityParameters, StringComparer.OrdinalIgnoreCase); } else if (taskIdentityParameters == null || taskIdentityParameters.Count == 0) { mergedParameters = new Dictionary <string, string>(factoryIdentityParameters, StringComparer.OrdinalIgnoreCase); } if (mergedParameters != null) { mergedParameters.TryGetValue(XMakeAttributes.runtime, out mergedRuntime); mergedParameters.TryGetValue(XMakeAttributes.architecture, out mergedArchitecture); mergedParameters[XMakeAttributes.runtime] = XMakeAttributes.GetExplicitMSBuildRuntime(mergedRuntime); mergedParameters[XMakeAttributes.architecture] = XMakeAttributes.GetExplicitMSBuildArchitecture(mergedArchitecture); } else { string taskRuntime = null; string taskArchitecture = null; string usingTaskRuntime = null; string usingTaskArchitecture = null; mergedParameters = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); taskIdentityParameters.TryGetValue(XMakeAttributes.runtime, out taskRuntime); factoryIdentityParameters.TryGetValue(XMakeAttributes.runtime, out usingTaskRuntime); if (!XMakeAttributes.TryMergeRuntimeValues(taskRuntime, usingTaskRuntime, out mergedRuntime)) { ErrorUtilities.ThrowInternalError("How did we get two runtime values that were unmergeable?"); } else { mergedParameters.Add(XMakeAttributes.runtime, mergedRuntime); } taskIdentityParameters.TryGetValue(XMakeAttributes.architecture, out taskArchitecture); factoryIdentityParameters.TryGetValue(XMakeAttributes.architecture, out usingTaskArchitecture); if (!XMakeAttributes.TryMergeArchitectureValues(taskArchitecture, usingTaskArchitecture, out mergedArchitecture)) { ErrorUtilities.ThrowInternalError("How did we get two runtime values that were unmergeable?"); } else { mergedParameters.Add(XMakeAttributes.architecture, mergedArchitecture); } } return(mergedParameters); }
public void TestMergeArchitectureValues() { string currentArchitecture = EnvironmentUtilities.Is64BitProcess ? XMakeAttributes.MSBuildArchitectureValues.x64 : XMakeAttributes.MSBuildArchitectureValues.x86; string notCurrentArchitecture = EnvironmentUtilities.Is64BitProcess ? XMakeAttributes.MSBuildArchitectureValues.x86 : XMakeAttributes.MSBuildArchitectureValues.x64; string mergedArchitecture; Assert.True(XMakeAttributes.TryMergeArchitectureValues(XMakeAttributes.MSBuildArchitectureValues.any, XMakeAttributes.MSBuildArchitectureValues.currentArchitecture, out mergedArchitecture)); Assert.Equal(currentArchitecture, mergedArchitecture); Assert.True(XMakeAttributes.TryMergeArchitectureValues(XMakeAttributes.MSBuildArchitectureValues.any, XMakeAttributes.MSBuildArchitectureValues.x64, out mergedArchitecture)); Assert.Equal(XMakeAttributes.MSBuildArchitectureValues.x64, mergedArchitecture); Assert.True(XMakeAttributes.TryMergeArchitectureValues(XMakeAttributes.MSBuildArchitectureValues.x86, XMakeAttributes.MSBuildArchitectureValues.any, out mergedArchitecture)); Assert.Equal(XMakeAttributes.MSBuildArchitectureValues.x86, mergedArchitecture); Assert.True(XMakeAttributes.TryMergeArchitectureValues(XMakeAttributes.MSBuildArchitectureValues.currentArchitecture, currentArchitecture, out mergedArchitecture)); Assert.Equal(currentArchitecture, mergedArchitecture); Assert.False(XMakeAttributes.TryMergeArchitectureValues(XMakeAttributes.MSBuildArchitectureValues.currentArchitecture, notCurrentArchitecture, out mergedArchitecture)); Assert.False(XMakeAttributes.TryMergeArchitectureValues(XMakeAttributes.MSBuildArchitectureValues.x64, XMakeAttributes.MSBuildArchitectureValues.x86, out mergedArchitecture)); }