/// <summary> /// Creates a new transformation file and adds it to the project. /// </summary> /// <param name="selectedProjectItem">The selected item to be transformed</param> /// <param name="itemName">Full name of the transformation file</param> /// <param name="projectPath">Full path to the current project</param> /// <param name="addDependentUpon">Wheter to add the new file dependent upon the source file</param> private void AddTransformFile(ProjectItem selectedProjectItem, string itemName, string projectPath, bool addDependentUpon) { try { string transformPath = Path.Combine(projectPath, itemName); string sourceFileName = selectedProjectItem.FileNames[1]; ITransformer transformer = TransformerFactory.GetTransformer(sourceFileName, null); transformer.CreateTransformFile(sourceFileName, transformPath, false); // Add the file to the project // If the DependentUpon metadata is required, add it under the original file // If not, add it to the project ProjectItem addedItem = addDependentUpon ? selectedProjectItem.ProjectItems.AddFromFile(transformPath) : selectedProjectItem.ContainingProject.ProjectItems.AddFromFile(transformPath); // We need to set the Build Action to None to ensure that it doesn't get published for web projects addedItem.Properties.Item("ItemType").Value = "None"; IVsHierarchy hierarchy = null; IVsProject vsProject = (IVsProject)hierarchy; IVsBuildPropertyStorage buildPropertyStorage = vsProject as IVsBuildPropertyStorage; if (buildPropertyStorage == null) { this.logger.LogMessage("Error obtaining IVsBuildPropertyStorage from hierarcy."); } } catch (Exception ex) { this.logger.LogMessage("AddTransformFile: Exception> " + ex.Message); } }
/// <summary> /// Creates a new transformation file and adds it to the project. /// </summary> /// <param name="hierarchy">The project hierarchy</param> /// <param name="selectedProjectItem">The selected item to be transformed</param> /// <param name="itemName">Full name of the transformation file</param> /// <param name="projectPath">Full path to the current project</param> /// <param name="addDependentUpon">Wheter to add the new file dependent upon the source file</param> private void AddTransformFile( IVsHierarchy hierarchy, ProjectItem selectedProjectItem, string itemName, string projectPath, bool addDependentUpon) { try { string transformPath = Path.Combine(projectPath, itemName); string sourceFileName = selectedProjectItem.FileNames[1]; ITransformer transformer = TransformerFactory.GetTransformer(sourceFileName, null); transformer.CreateTransformFile(sourceFileName, transformPath, false); // Add the file to the project // If the DependentUpon metadata is required, add it under the original file // If not, add it to the project ProjectItem addedItem = addDependentUpon ? selectedProjectItem.ProjectItems.AddFromFile(transformPath) : selectedProjectItem.ContainingProject.ProjectItems.AddFromFile(transformPath); // We need to set the Build Action to None to ensure that it doesn't get published for web projects addedItem.Properties.Item("ItemType").Value = "None"; IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage; if (buildPropertyStorage == null) { this.logger.LogMessage("Error obtaining IVsBuildPropertyStorage from hierarcy."); } else if (ErrorHandler.Succeeded(hierarchy.ParseCanonicalName(addedItem.FileNames[0], out uint addedItemId))) { buildPropertyStorage.SetItemAttribute(addedItemId, SlowCheetahPackage.IsTransformFile, "true"); if (addDependentUpon) { // Not all projects (like CPS) set the dependent upon metadata when using the automation object buildPropertyStorage.GetItemAttribute(addedItemId, SlowCheetahPackage.DependentUpon, out string dependentUponValue); if (string.IsNullOrEmpty(dependentUponValue)) { // It didm not set it buildPropertyStorage.SetItemAttribute(addedItemId, SlowCheetahPackage.DependentUpon, selectedProjectItem.Name); } } } } catch (Exception ex) { this.logger.LogMessage("AddTransformFile: Exception> " + ex.Message); } }