in src/Microsoft.VisualStudio.SlowCheetah.VS/Package/AddTransformCommand.cs [187:238]
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);
}
}