/// <summary> /// Validates the given set of parameters, logging the appropriate errors as necessary. /// </summary> private static void VerifyThrowIdentityParametersValid(IDictionary <string, string> identityParameters, IElementLocation errorLocation, string taskName, string runtimeName, string architectureName) { // validate the task factory parameters if (identityParameters != null && identityParameters.Count > 0) { string runtime = null; if (identityParameters.TryGetValue(XMakeAttributes.runtime, out runtime)) { if (!XMakeAttributes.IsValidMSBuildRuntimeValue(runtime)) { ProjectErrorUtilities.ThrowInvalidProject ( errorLocation, "TaskLoadFailureInvalidTaskHostFactoryParameter", taskName, runtime, runtimeName, XMakeAttributes.MSBuildRuntimeValues.clr2, XMakeAttributes.MSBuildRuntimeValues.clr4, XMakeAttributes.MSBuildRuntimeValues.currentRuntime, XMakeAttributes.MSBuildRuntimeValues.any ); } } string architecture = null; if (identityParameters.TryGetValue(XMakeAttributes.architecture, out architecture)) { if (!XMakeAttributes.IsValidMSBuildArchitectureValue(architecture)) { ProjectErrorUtilities.ThrowInvalidProject ( errorLocation, "TaskLoadFailureInvalidTaskHostFactoryParameter", taskName, architecture, architectureName, XMakeAttributes.MSBuildArchitectureValues.x86, XMakeAttributes.MSBuildArchitectureValues.x64, XMakeAttributes.MSBuildArchitectureValues.currentArchitecture, XMakeAttributes.MSBuildArchitectureValues.any ); } } } }
/// <summary> /// Returns true if a task host exists that can service the requested runtime and architecture /// values, and false otherwise. /// </summary> internal static bool DoesTaskHostExist(string runtime, string architecture) { if (runtime != null) { runtime = runtime.Trim(); } if (architecture != null) { architecture = architecture.Trim(); } if (!XMakeAttributes.IsValidMSBuildRuntimeValue(runtime)) { ErrorUtilities.ThrowArgument("InvalidTaskHostFactoryParameter", runtime, "Runtime", XMakeAttributes.MSBuildRuntimeValues.clr2, XMakeAttributes.MSBuildRuntimeValues.clr4, XMakeAttributes.MSBuildRuntimeValues.currentRuntime, XMakeAttributes.MSBuildRuntimeValues.any); } if (!XMakeAttributes.IsValidMSBuildArchitectureValue(architecture)) { ErrorUtilities.ThrowArgument("InvalidTaskHostFactoryParameter", architecture, "Architecture", XMakeAttributes.MSBuildArchitectureValues.x86, XMakeAttributes.MSBuildArchitectureValues.x64, XMakeAttributes.MSBuildArchitectureValues.currentArchitecture, XMakeAttributes.MSBuildArchitectureValues.any); } runtime = XMakeAttributes.GetExplicitMSBuildRuntime(runtime); architecture = XMakeAttributes.GetExplicitMSBuildArchitecture(architecture); IDictionary <string, string> parameters = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); parameters.Add(XMakeAttributes.runtime, runtime); parameters.Add(XMakeAttributes.architecture, architecture); TaskHostContext desiredContext = CommunicationsUtilities.GetTaskHostContext(parameters); string taskHostLocation = NodeProviderOutOfProcTaskHost.GetMSBuildLocationFromHostContext(desiredContext); if (taskHostLocation != null && FileUtilities.FileExistsNoThrow(taskHostLocation)) { return(true); } return(false); }