コード例 #1
0
        private async Task <string> GetComponentNamesMessageAsync(ITargetScopeService target)
        {
            IEnumerable <Envoy> targetEnvoys   = target.GetDefaultBuildSpecScope().Envoy.Envoys;
            IList <string>      componentNames = new List <string>();

            foreach (Envoy targetEnvoy in targetEnvoys)
            {
                if (await IsComponentForDisplayAsync(targetEnvoy))
                {
                    componentNames.Add('\t' + targetEnvoy.Name.Last);
                }
            }

            return(string.Join(Environment.NewLine, componentNames));
        }
コード例 #2
0
        private async Task <Envoy> ResolveComponentOnTargetAsync(string componentName, ITargetScopeService targetScope)
        {
            ITargetScopeService targetbuildBuildSpecScope = targetScope.GetDefaultBuildSpecScope();
            IEnumerable <Envoy> matchingComponents        = await targetbuildBuildSpecScope.TargetScope.ResolveAsync(new QualifiedName(componentName));

            if (matchingComponents.HasMoreThan(1))
            {
                throw new CommandLineOperationException("Multiple components matching the provided name were found. This likely indicates a corrupt project file.");
            }

            Envoy componentEnvoy = matchingComponents.SingleOrDefault();

            if (componentEnvoy == null)
            {
                CommandLineInterfaceApplication.WriteError(await CreateResolveComponentErrorMessageAsync(componentName, targetScope.GetScopeDisplayName(), targetScope));
            }

            return(componentEnvoy);
        }
コード例 #3
0
        private async Task <string> GetTargetNamesForProvidedComponentNameAsync(Project project)
        {
            IEnumerable <ITargetScopeService> targets = project.GetTargets(GetTargetsOptions.ExcludeNonUserManaged);
            var targetNames = new List <string>();

            foreach (var target in targets)
            {
                ITargetScopeService targetbuildBuildSpecScope = target.GetDefaultBuildSpecScope();
                IEnumerable <Envoy> matchingComponents        = await targetbuildBuildSpecScope.TargetScope.ResolveAsync(new QualifiedName(ComponentName));

                if (matchingComponents.HasExactly(1))
                {
                    targetNames.Add('\t' + target.GetScopeDisplayName());
                }
                else if (matchingComponents.HasMoreThan(1))
                {
                    throw new CommandLineOperationException("Multiple components matching the provided name were found. This likely indicates a corrupt project file.");
                }
            }
            return(string.Join(Environment.NewLine, targetNames));
        }
コード例 #4
0
        private async Task AppendAvailableComponentsForProvidedTargetNameErrorMessageAsync(StringBuilder errorMessageBuilder, ITargetScopeService targetScopeService)
        {
            string validComponentNamesHeader = string.Format(CultureInfo.CurrentCulture,
                                                             LocalizedStrings.BuildComponentTool_ValidComponentNamesHeader,
                                                             ComponentType.GetComponentDisplayName());
            string validComponentNamesMessage = await GetComponentNamesMessageAsync(targetScopeService);

            if (!string.IsNullOrEmpty(validComponentNamesMessage))
            {
                errorMessageBuilder.AppendLine()
                .AppendLine(validComponentNamesHeader)
                .AppendLine(validComponentNamesMessage);
            }
        }
コード例 #5
0
        private async Task <string> CreateResolveComponentErrorMessageAsync(string componentName, string targetName, ITargetScopeService targetScopeService)
        {
            var errorMessageBuilder = new StringBuilder(
                string.Format(
                    CultureInfo.CurrentCulture,
                    LocalizedStrings.BuildComponentTool_InvalidComponentName,
                    componentName,
                    targetName));

            if (!await AppendAvailableTargetsForProvidedComponentNameErrorMessageAsync(targetScopeService.TargetScope.GetProject(), errorMessageBuilder))
            {
                await AppendAvailableComponentsForProvidedTargetNameErrorMessageAsync(errorMessageBuilder, targetScopeService);
            }
            return(errorMessageBuilder.ToString());
        }