in src/Microsoft.VisualStudio.SlowCheetah.VS/Package/AddTransformCommand.cs [84:177]
protected override void OnInvoke(object sender, EventArgs e)
{
uint itemid = VSConstants.VSITEMID_NIL;
if (!ProjectUtilities.IsSingleProjectItemSelection(out IVsHierarchy hierarchy, out itemid))
{
return;
}
IVsProject vsProject = (IVsProject)hierarchy;
if (!this.package.ProjectSupportsTransforms(vsProject))
{
return;
}
if (ErrorHandler.Failed(vsProject.GetMkDocument(VSConstants.VSITEMID_ROOT, out string projectFullPath)))
{
return;
}
IVsBuildPropertyStorage buildPropertyStorage = vsProject as IVsBuildPropertyStorage;
if (buildPropertyStorage == null)
{
this.logger.LogMessage("Error obtaining IVsBuildPropertyStorage from hierarchy.");
return;
}
// get the name of the item
if (ErrorHandler.Failed(vsProject.GetMkDocument(itemid, out string itemFullPath)))
{
return;
}
// Save the project file
IVsSolution solution = (IVsSolution)Shell.Package.GetGlobalService(typeof(SVsSolution));
int hr = solution.SaveSolutionElement((uint)__VSSLNSAVEOPTIONS.SLNSAVEOPT_SaveIfDirty, hierarchy, 0);
ErrorHandler.ThrowOnFailure(hr);
ProjectItem selectedProjectItem = PackageUtilities.GetAutomationFromHierarchy<ProjectItem>(hierarchy, itemid);
if (selectedProjectItem != null)
{
try
{
selectedProjectItem.Save();
}
catch
{
// If the item is not open, an exception is thrown,
// but that is not a problem as it is not dirty
}
// Checks the SlowCheetah NuGet package installation
this.package.JoinableTaskFactory.Run(() => this.nuGetManager.CheckSlowCheetahInstallation(hierarchy));
// need to enure that this item has metadata TransformOnBuild set to true
buildPropertyStorage.SetItemAttribute(itemid, SlowCheetahPackage.TransformOnBuild, "true");
string itemFolder = Path.GetDirectoryName(itemFullPath);
string itemFilename = Path.GetFileNameWithoutExtension(itemFullPath);
string itemExtension = Path.GetExtension(itemFullPath);
string itemFilenameExtension = Path.GetFileName(itemFullPath);
IEnumerable<string> configs = ProjectUtilities.GetProjectConfigurations(selectedProjectItem.ContainingProject);
List<string> transformsToCreate = null;
if (configs != null)
{
transformsToCreate = configs.ToList();
}
if (transformsToCreate == null)
{
transformsToCreate = new List<string>();
}
// if it is a web project we should add publish profile specific transforms as well
var publishProfileTransforms = this.GetPublishProfileTransforms(hierarchy, projectFullPath);
if (publishProfileTransforms != null)
{
transformsToCreate.AddRange(publishProfileTransforms);
}
using (OptionsDialogPage optionsPage = new OptionsDialogPage())
{
optionsPage.LoadSettingsFromStorage();
foreach (string config in transformsToCreate)
{
string itemName = string.Format(CultureInfo.CurrentCulture, Resources.Resources.String_FormatTransformFilename, itemFilename, config, itemExtension);
this.AddTransformFile(hierarchy, selectedProjectItem, itemName, itemFolder, optionsPage.AddDependentUpon);
}
}
}
}