/// <summary> /// Adds a <see cref="SolutionProject"/> to the solution exporter, and optionally registers it as generated. /// </summary> /// <param name="exporter">The @this exporter.</param> /// <param name="project">The project to add.</param> /// <param name="isGenerated">Whether the project is generated.</param> public static void AddProject(this ISolutionExporter exporter, SolutionProject project, bool isGenerated = false) { exporter.Projects.Add(project.Guid, project); if (isGenerated) { exporter.GeneratedItems.Add(project.Guid); } }
public SolutionController(IWebAppContext appContext , ISolutionService solutionService , ISolutionExporter solutionExporter , ISolutionImporter solutionImporter ) : base(appContext, solutionService) { _solutionExporter = solutionExporter; _solutionImporter = solutionImporter; }
/// <summary> /// Gets or adds a <see cref="SolutionFolder"/> to the solution exporter, and optionally registers it as generated. /// </summary> /// <param name="exporter">The @this exporter.</param> /// <param name="folderGuid">The folder identifier.</param> /// <param name="folderName">The folder name.</param> /// <param name="isGenerated">Whether the folder is generated.</param> /// <returns>The fetched or created solution folder.</returns> public static SolutionFolder GetOrAddFolder(this ISolutionExporter exporter, Guid folderGuid, string folderName, bool isGenerated = false) { SolutionFolder toReturn = exporter.Folders.GetOrAdd(folderGuid, k => new SolutionFolder(folderName)); if (isGenerated) { exporter.GeneratedItems.Add(folderGuid); } return(toReturn); }
private void ProcessSetForKnownFolders <T>(ISolutionExporter exporter, Dictionary <AssetLocation, Tuple <Guid, string> > knownFolderMapping, IEnumerable <T> set, Func <T, AssetLocation> getAssetLocation, Func <T, Guid> getGuidFunc) { foreach (T item in set) { if (knownFolderMapping.TryGetValue(getAssetLocation(item), out Tuple <Guid, string> guidNameTuple)) { exporter.GetOrAddFolder(guidNameTuple.Item1, guidNameTuple.Item2, isGenerated: true) .Children.Add(getGuidFunc(item)); } } }
//Используя переданные ITaskDataProvider, ISolutionExporter, решить задачу и вывести результат. static void SolveTasks(ITaskDataProvider taskDataProvider, ISolutionExporter solutionExporter) { //Пока в ITaskDataProvider есть входные данные while (taskDataProvider.HasNextTaskData()) { //Получить входные данные. Tuple <ITransportNetwork, IEnumerable <IRoute> > taskData = taskDataProvider.GetTaskData(); ITransportNetwork transportNetwork = taskData.Item1; IEnumerable <IRoute> routes = taskData.Item2; //Найти столкновения на станциях. IEnumerable <CollisionAtStationCase> collisionAtStationCases = CollisionsFinder.FindCollisionsAtStations(transportNetwork, routes); //Найти столкновения на путях. IEnumerable <CollisionOnConnectionBetweenStationsCase> collisionOnConnectionBetweenStationsCases = CollisionsFinder.FindCollisionsOnConnectionsBetweenStations(transportNetwork, routes); //Передать результаты решения ISolutionExporter. solutionExporter.Export(transportNetwork, routes, collisionAtStationCases, collisionOnConnectionBetweenStationsCases); } }
public void ExportSolution(IUnityProjectExporter unityProjectExporter, FileInfo solutionFilePath, DirectoryInfo generatedProjectsFolder) { SolutionFileInfo solutionFileInfo = TextSolutionFileParser.ParseExistingSolutionFile(logger, solutionFilePath.FullName); ISolutionExporter exporter = unityProjectExporter.CreateSolutionExporter(logger, solutionFilePath); //TODO we need to figure out how to handle existing projects // Remove known folders solutionFileInfo.Projects.Remove(config.BuiltInPackagesFolderGuid); solutionFileInfo.Projects.Remove(config.ImportedPackagesFolderGuid); solutionFileInfo.Projects.Remove(config.ExternalPackagesFolderGuid); // Process generated projects foreach (KeyValuePair <string, CSProjectInfo> projectPair in CSProjects) { Uri relativePath = Utilities.GetRelativeUri(solutionFilePath.Directory.FullName, MSBuildUnityProjectExporter.GetProjectPath(projectPair.Value, generatedProjectsFolder).FullName); exporter.AddProject(CreateSolutionProjectEntry(projectPair.Value, relativePath, solutionFileInfo), isGenerated: true); } // Add dependency project string dependencyProjectName = $"{UnityProjectName}.Dependencies.msb4u"; exporter.AddProject(GetDependencyProjectReference(dependencyProjectName, $"{dependencyProjectName}.csproj"), isGenerated: true); // Process existing projects foreach (KeyValuePair <Guid, Project> projectPair in solutionFileInfo.Projects) { if (!exporter.Projects.ContainsKey(projectPair.Key) && !solutionFileInfo.MSB4UGeneratedItems.Contains(projectPair.Key) && projectPair.Value.TypeGuid != SolutionProject.FolderTypeGuid) { exporter.AddProject(GetSolutionProjectEntryFrom(projectPair.Value, solutionFileInfo)); } } // Bring forward the properties, then set the one we care about exporter.Properties.AddRange(solutionFileInfo.Properties); exporter.Properties["HideSolutionNode"] = "FALSE"; // Bring forward the extensibility globals, then set the one we care about exporter.ExtensibilityGlobals.AddRange(solutionFileInfo.ExtensibilityGlobals); exporter.ExtensibilityGlobals["SolutionGuid"] = "{" + config.SolutionGuid.ToString().ToUpper() + "}"; // Bring forward the pairs, and then set the platforms we know of exporter.ConfigurationPlatforms.AddRange(solutionFileInfo.ConfigPlatformPairs); foreach (CompilationPlatformInfo platform in AvailablePlatforms) { exporter.ConfigurationPlatforms.Add(new ConfigurationPlatformPair(UnityConfigurationType.InEditor, platform.Name)); exporter.ConfigurationPlatforms.Add(new ConfigurationPlatformPair(UnityConfigurationType.Player, platform.Name)); } // Set the folders by scanning for "projects" with folder type in old projects foreach (KeyValuePair <Guid, Project> folderPair in solutionFileInfo.Projects.Where(t => t.Value.TypeGuid == SolutionProject.FolderTypeGuid)) { exporter.GetOrAddFolder(folderPair.Key, folderPair.Value.Name) .Children.AddRange(solutionFileInfo.ChildToParentNestedMappings.Where(t => t.Value == folderPair.Key).Select(t => t.Key)); } Dictionary <AssetLocation, Tuple <Guid, string> > knownFolderMapping = GetKnownFolderMapping(); // Confiure known folders for generated projects ProcessSetForKnownFolders(exporter, knownFolderMapping, CSProjects.Values, t => t.AssemblyDefinitionInfo.AssetLocation, t => t.Guid); //TODO handle existing projects exporter.AdditionalSections = solutionFileInfo.SolutionSections; exporter.Write(); }