public override void RunFinishedExtention() { if (DestinationDirectory.EndsWith(SafeProjectName + Path.DirectorySeparatorChar + SafeProjectName)) { //The projects were created under a seperate folder -- lets fix it //todo this appears to do something incorrect if create directory for solution was not selected //first move each projects up a directory var projectsObjects = new List <Project>(); foreach (Project childProject in DTE.Solution.Projects) { var fileName = childProject.FileName; if (!string.IsNullOrEmpty(fileName)) //Solution Folder { var projectBadPath = fileName; var projectGoodPath = projectBadPath.Replace( SafeProjectName + Path.DirectorySeparatorChar + SafeProjectName + Path.DirectorySeparatorChar, SafeProjectName + Path.DirectorySeparatorChar); DTE.Solution.Remove(childProject); Directory.Move(Path.GetDirectoryName(projectBadPath), Path.GetDirectoryName(projectGoodPath)); DTE.Solution.AddFromFile(projectGoodPath); } } //now add the references to the plugin project //because they got removed when we move the project folders Project pluginProject = null; foreach (Project childProject in DTE.Solution.Projects) { var fileName = childProject.FileName; if (!string.IsNullOrEmpty(fileName)) //Solution Folder { if (fileName.EndsWith(".Plugins.csproj")) { pluginProject = childProject; } } } foreach (Project childProject in DTE.Solution.Projects) { var fileName = childProject.FileName; if (!string.IsNullOrEmpty(fileName)) //Solution Folder { if (fileName.EndsWith(".Test.csproj") || fileName.EndsWith(".Console.csproj")) { VSProject vsProj = (VSProject)childProject.Object; vsProj.References.AddProject(pluginProject); } } } } if (DestinationDirectory.EndsWith(SafeProjectName + Path.DirectorySeparatorChar + SafeProjectName)) { DestinationDirectory = DestinationDirectory.Substring(0, DestinationDirectory.Length - (Path.DirectorySeparatorChar + SafeProjectName).Length); } var consoleFileName = DestinationDirectory + Path.DirectorySeparatorChar + SafeProjectName + ".Console" + Path.DirectorySeparatorChar + "Encrypt XRM Connection.bat"; if (File.Exists(consoleFileName)) { var read = File.ReadAllText(consoleFileName); read = read.Replace("$ext_safeprojectname$", SafeProjectName); File.WriteAllText(consoleFileName, read); } var visualStudioService = new VisualStudioService(DTE, useSolutionDirectory: DestinationDirectory); //add xrm connection and package settings to solution items visualStudioService.AddSolutionItem("xrmpackage.xrmsettings", XrmPackageSettings); if (XrmPackageSettings.Connections.Any()) { visualStudioService.AddSolutionItem("solution.xrmconnection", XrmPackageSettings.Connections.First()); } visualStudioService.CloseAllDocuments(); RemoveEmptyFolders(DestinationDirectory); }
public override void RunFinishedExtention() { if (DestinationDirectory.EndsWith(SafeProjectName + Path.DirectorySeparatorChar + SafeProjectName)) { //The projects were created under a seperate folder -- lets fix it //first move each projects up a directory var projectsObjects = new List <Project>(); foreach (Project childProject in DTE.Solution.Projects) { var fileName = childProject.FileName; if (!string.IsNullOrEmpty(fileName)) //Solution Folder { var projectBadPath = fileName; var projectGoodPath = projectBadPath.Replace( SafeProjectName + Path.DirectorySeparatorChar + SafeProjectName + Path.DirectorySeparatorChar, SafeProjectName + Path.DirectorySeparatorChar); DTE.Solution.Remove(childProject); Directory.Move(Path.GetDirectoryName(projectBadPath), Path.GetDirectoryName(projectGoodPath)); DTE.Solution.AddFromFile(projectGoodPath); } } //now add the references to the plugin project //because they got removed when we move the project folders Project pluginProject = null; foreach (Project childProject in DTE.Solution.Projects) { var fileName = childProject.FileName; if (!string.IsNullOrEmpty(fileName)) //Solution Folder { if (fileName.EndsWith(".Plugins.csproj")) { pluginProject = childProject; } } } foreach (Project childProject in DTE.Solution.Projects) { var fileName = childProject.FileName; if (!string.IsNullOrEmpty(fileName)) //Solution Folder { if (fileName.EndsWith(".Test.csproj") || fileName.EndsWith(".Console.csproj")) { VSProject vsProj = (VSProject)childProject.Object; vsProj.References.AddProject(pluginProject); } } } } if (DestinationDirectory.EndsWith(SafeProjectName + Path.DirectorySeparatorChar + SafeProjectName)) { DestinationDirectory = DestinationDirectory.Substring(0, DestinationDirectory.Length - (Path.DirectorySeparatorChar + SafeProjectName).Length); } //okay so lets update the encrypt connection bat and the xrmsetting.txt files in the console project var consoleProjectPath = DestinationDirectory + Path.DirectorySeparatorChar + SafeProjectName + ".Console"; var encryptBatFileName = consoleProjectPath + Path.DirectorySeparatorChar + "Encrypt XRM Connection.bat"; if (File.Exists(encryptBatFileName)) { var read = File.ReadAllText(encryptBatFileName); read = read.Replace("$ext_safeprojectname$", SafeProjectName); File.WriteAllText(encryptBatFileName, read); } var consoleConnectionFileName = consoleProjectPath + Path.DirectorySeparatorChar + "XrmSetting.txt"; if (File.Exists(consoleConnectionFileName)) { if (XrmPackageSettings != null && XrmPackageSettings.Connections != null && XrmPackageSettings.Connections.Any()) { try { var connection = XrmPackageSettings.Connections.First(); var serialise = ObjectToJsonString(connection); File.WriteAllText(consoleConnectionFileName, serialise); } catch (Exception ex) { MessageBox.Show("Error setting console application connection: " + ex.DisplayString()); } } } var visualStudioService = new VisualStudioService(DTE, useSolutionDirectory: DestinationDirectory); //add xrm connection and package settings to solution items visualStudioService.AddSolutionItem("xrmpackage.xrmsettings", XrmPackageSettings); if (XrmPackageSettings.Connections.Any()) { visualStudioService.AddSolutionItem("solution.xrmconnection", XrmPackageSettings.Connections.First()); } visualStudioService.CloseAllDocuments(); RemoveEmptyFolders(DestinationDirectory); }