protected override void GenerateHelper() { CmdletsOutputPath = Path.Combine(OutputFolder, CmdletsOutputSubFoldername); var configurationsFolder = Path.Combine(Options.RootPath, ConfigurationFolderName); var serviceConfigurationsFolder = Path.Combine(configurationsFolder, ServiceConfigFoldername); ModelCollection = ConfigModelCollection.LoadAllConfigs(configurationsFolder, Options.Verbose); XmlOverridesMerger.ApplyOverrides(Options.RootPath, ModelCollection, serviceConfigurationsFolder); SourceArtifacts = new GenerationSources(OutputFolder, SdkNugetFolder, Options.VersionNumber); LoadCoreSDKRuntimeMaterials(); LoadSpecialServiceAssemblies(); CheckForServicePrefixDuplication(); if (!Options.SkipCmdletGeneration) { //We clean and setup service folders, some services share a folder, project and module, so we use distinct foreach (var project in ModelCollection.ConfigModels.Values .Where(service => !service.SkipCmdletGeneration) .GroupBy(folder => folder.AssemblyName)) { var modelsWithGuid = project.Where(model => !string.IsNullOrWhiteSpace(model.ServiceModuleGuid)); if (modelsWithGuid.Count() > 1) { AnalysisError.DuplicatedAssemblyName(modelsWithGuid); } SetupOutputDir(project.Key); } } foreach (var configModel in ModelCollection.ConfigModels.Values) { // hold some state to model under work so we can make use of // static helpers CurrentModel = configModel; try { Logger.Log("======================================================="); Logger.Log("Processing service: {0}", CurrentModel.ServiceName); LoadCurrentService(CurrentModel); if (!Options.SkipCmdletGeneration) { GenerateClientAndCmdlets(); // if the service contains any hand-maintained cmdlets, scan them to update the // argument completers for any use of ConstantClass-derived types ScanAdvancedCmdletsForServices(); GenerateArgumentCompleters(); ProcessLegacyAliasesForCustomCmdlets(); CheckForCmdletNameDuplication(); } } catch (Exception e) { AnalysisError.ExceptionWhileGeneratingForService(CurrentModel, e); } } if (!Options.SkipCmdletGeneration) { ScanAdvancedCmdletsForCommonModule(); SourceArtifacts.WriteLegacyAliasesFile(LegacyAliases, ModelCollection.CommonModuleAliases); SourceArtifacts.WriteMonolithicCompletionScriptsFile(GetArgumentCompletionScriptContent()); SourceArtifacts.WriteMonolithicProjectFile(); SourceArtifacts.WriteMonolithicModuleFiles(); SourceArtifacts.WriteAdditionalAliasesFiles(Aliases); SourceArtifacts.WriteModularSolution(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCopyModularArtifactsScript(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCmdletsList(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCommonModule(CommonAdvancedCmdlets.Keys, ModelCollection.CommonModuleAliases); SourceArtifacts.WriteCommonProjectFile(); SourceArtifacts.WriteLegacyAliasesFileForCommonModule(ModelCollection.CommonModuleAliases); SourceArtifacts.WriteCommonCompletionScriptsFile(); SourceArtifacts.WriteCommonModuleCmdletsList(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteModularProjectFiles(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteLegacyAliasesModularFiles(LegacyAliases, ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCompletersModularFiles(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteModularManifestFiles(ModelCollection.ConfigModels.Values, LegacyAliases); SourceArtifacts.WriteVersionFile(); WriteConfigurationChanges(); } foreach (var configModel in ModelCollection.ConfigModels.Values) { foreach (var error in configModel.AnalysisErrors.Concat( configModel.ServiceOperationsList .OrderBy(so => so.MethodName) .SelectMany(operation => operation.AnalysisErrors))) { Logger.LogError(error.ToString()); } } }