Esempio n. 1
0
        /// <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
                        );
                    }
                }
            }
        }
Esempio n. 2
0
        /// <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);
        }