public void Execute(ProjectConfiguration configuration, string selectedProject)
 {
     GenerateSolution(
         configuration.RootPath,
         configuration.ThirdPartiesRootPath,
         configuration.ResolveAssemblies(selectedProject));
 }
 public void Execute(ProjectConfiguration configuration, string selectedProject)
 {
     CopyThirdParties(
         configuration.RootPath,
         configuration.ThirdPartiesRootPath,
         selectedProject);
 }
        public void Execute(ProjectConfiguration configuration, string selectedProject)
        {
            DirectoryInfo projectDirectory = new DirectoryInfo(configuration.RootPath);
            List<FileSystemInfo> projectFiles = projectDirectory
                .EnumerateFileSystemInfos("*.csproj", SearchOption.AllDirectories)
                .ToList();

            var targetProjects = configuration.ResolveAssemblies(selectedProject);

            if (_checkOnlyDependencies)
            {
                var projectSetup = new ProjectSetup
                {
                    WhenAssemblyKeyFileNotFound = ProjectSetupBehavior.Valid,
                    WhenContainsFileReferences = ProjectSetupBehavior.Valid,
                    WhenContainsProjectReferences = ProjectSetupBehavior.Warn,
                    WhenReferenceNotResolved = ProjectSetupBehavior.Warn,
                    WhenReferenceResolvedInDifferentLocation = ProjectSetupBehavior.Warn,
                    WhenRequiredProjectLinkNotFound = ProjectSetupBehavior.Valid
                };

                var consoleLogger = ConsoleLogger.Default;

                var generator = new SolutionGenerator.Toolkit.SolutionGenerator(consoleLogger);
                var projectLoader = generator.GetProjectLoader(projectSetup, configuration.RootPath);
                var targetProjectFiles = generator.GetTargetProjectFiles(projectLoader, targetProjects);

                ReferenceWalker walker = new ReferenceWalker(consoleLogger);
                var dependencies = walker.WalkReferencesRecursively(
                    projectSetup, projectLoader, targetProjectFiles,
                    new[] {configuration.ThirdPartiesRootPath}, new HashSet<string>());

                projectFiles = new List<FileSystemInfo>();
                foreach (var dependency in dependencies)
                {
                    var project = projectLoader.GetProjectById(dependency);
                    projectFiles.Add(new FileInfo(project.ProjectFileLocation));
                }
            }

            ChangeOutputPath(projectFiles, configuration.RootPath, configuration.BinariesOutputPath, targetProjects);

            ChangeReferences(projectFiles,
                configuration.RootPath,
                configuration.BinariesOutputPath,
                configuration.TargetFrameworkVersion,
                configuration.GetSystemRuntimeReferenceMode,
                configuration.GetSpecificVersionReferenceMode,
                targetProjects);

            ChangeProjectSettings(projectFiles);
        }
        private static void DisplayConfiguration(ProjectConfiguration configuration)
        {
            if (configuration == null)
                throw new NullReferenceException("configuration is null");
            if (configuration.Groups == null)
                throw new NullReferenceException("configuration.Groups are null");

            foreach (ProjectGroup projectGroup in configuration.Groups)
            {
                ConsoleLogger.Default.Info("Group = {0}, Items = {1}", projectGroup.Name, projectGroup.Items != null ? projectGroup.Items.Length : 0);
                if (projectGroup.Items != null)
                {
                    foreach (string projectInfo in projectGroup.Items)
                    {
                        ConsoleLogger.Default.Info("Project = {0}", projectInfo);
                    }
                }
            }
        }
        private static void TestProjectConfigurationSerialization()
        {
            ProjectConfiguration configuration = new ProjectConfiguration();

            configuration.ProjectSetup = new ProjectSetup();
            configuration.ProjectSetup.RequiredProjectFiles = new[] { "BSS.Shared.v5\\SNK\\AssemblyKey.snk", "Source\\AssemblyInfoCommon.cs" };

            configuration.SourceFolders = new[] { "BSS.Shared.v6\\Source", "Source" };
            configuration.ThirdPartyFolders = new[] { "Binaries" };

            configuration.Groups = new ProjectGroup[3];

            ProjectGroup projectGroup = new ProjectGroup();
            projectGroup.Name = "Services";
            projectGroup.Items = new[]
                                        {
                                            @"Source\Application\ProcessingService\BSS.ERP.Application.ProcessingService-trade.csproj"
                                        };
            configuration.Groups[0] = projectGroup;

            ProjectGroup secondProjectGroup = new ProjectGroup();
            secondProjectGroup.Name = "GUI";
            secondProjectGroup.Items = new[]
                                              {
                                                  @"Source\GUI\Windows\TradeLauncher\BSS.ERP.GUI.Windows.Launcher-trade.csproj",
                                              };
            configuration.Groups[1] = secondProjectGroup;


            ProjectGroup groupGroup = new ProjectGroup();
            groupGroup.ContainsGroupNames = true;
            groupGroup.Name = "All";
            groupGroup.Items = new[] { "Services", "GUI" };
            configuration.Groups[2] = groupGroup;

            ConsoleLogger.Default.Info(configuration.XmlSerialize());
        }
		private static List<string> CollectProjectsFromGroup(string currentGroupName, ProjectConfiguration configuration)
		{
			List<string> projectList = new List<string>();

			ProjectGroup projectGroup = configuration.Select(currentGroupName);

			if (projectGroup == null)
				throw new Exception(string.Format("Project group name {0} not found in configuration.", currentGroupName));

			if (projectGroup.ContainsGroupNames)
			{
				if (projectGroup.Items != null)
				{
					foreach (string groupName in projectGroup.Items)
					{
						IEnumerable<string> projects = CollectProjectsFromGroup(groupName, configuration);
						projectList.AddRange(projects);
					}
				}
			}
			else
			{
				projectList.AddRange(projectGroup.Items);
			}

			if (projectList.Count > 1)
			{
				// remove dublicates
				HashSet<string> duplicates = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
				for (int i = 0; i < projectList.Count; ++i)
				{
					string location = projectList[i];
					if (duplicates.Contains(location))
					{
						projectList.RemoveAt(i);
						--i;
					}
					duplicates.Add(location);
				}
			}
			return projectList;
		}