Skip to content
This repository was archived by the owner on Feb 20, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# User-specific files
*.suo
*.user
Thumbs.db
*.userosscache
*.sln.docstates

Expand Down
200 changes: 99 additions & 101 deletions GAT/Src/Actions/AddVsixManifestAction.cs
Original file line number Diff line number Diff line change
@@ -1,102 +1,100 @@
//===================================================================================
// Microsoft patterns & practices
// Guidance Automation Toolkit
//===================================================================================
// Copyright (c) Microsoft Corporation. All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===================================================================================
// License: MS-LPL
//===================================================================================

using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.Practices.ComponentModel;
using EnvDTE;
using System.Diagnostics;
using System.Xml;
using Microsoft.Practices.RecipeFramework.Configuration;
using System.IO;

namespace Microsoft.Practices.RecipeFramework.MetaGuidancePackage.Actions
{
/// <summary>
/// Adds a VSIX manifest project item based on the Guidance Package configuration file
/// </summary>
[ServiceDependency(typeof(DTE))]
public class AddVsixManifestAction : Action
{
/// <summary>
/// The guidance package project.
/// </summary>
[Input(Required = true)]
public Project PackageProject { get; set; }

/// <summary>
/// Does nothing, as un-registration must be done explicitly.
/// </summary>
public override void Undo()
{
// Must un-register to undo.
}

/// <summary>
/// Adds the vsix manifest to the guidance package project
/// </summary>
public override void Execute()
{
Trace.TraceInformation("Adding VSIX manifest...");

// Search the guidance package configuration file
var configurationFile = GetConfigurationFileName(this.PackageProject);

// Generate the vsix manifest content
var template = new VsixManifestTemplate();
template.GuidancePackage = Microsoft.Practices.RecipeFramework.GuidancePackage.ReadConfiguration(configurationFile);
template.ConfigurationFile = Path.GetFileName(configurationFile);

var vsixManifestContent = template.TransformText();

// Write the content
var targetManifestFile = Path.Combine(Path.GetDirectoryName(this.PackageProject.FullName), "source.extension.vsixmanifest");
File.WriteAllText(targetManifestFile, vsixManifestContent);

// Add the manifest to the guidance package project
var manifest = this.PackageProject.ProjectItems.AddFromFile(targetManifestFile);

// Set vsix manifest project item properties
manifest.Properties.Item("BuildAction").Value = 0;
manifest.Properties.Item("CopyToOutputDirectory").Value = 0;
manifest.Properties.Item("ItemType").Value = "None";
}

private string GetConfigurationFileName(Project project)
{
foreach (ProjectItem item in project.ProjectItems)
{
if (item.Name.EndsWith(".xml"))
{
using (XmlReader reader = XmlReader.Create(item.get_FileNames(1)))
{
reader.MoveToContent();
if (reader.LocalName == ElementNames.GuidancePackage &&
reader.NamespaceURI == SchemaInfo.PackageNamespace)
{
string file = Path.GetFileName(item.get_FileNames(1));

if (!Path.IsPathRooted(file))
{
file = Path.Combine(Path.GetDirectoryName(project.FileName), file);
}
return file;
}
}
}
}
throw new InvalidOperationException(Properties.Resources.Registration_NoPackageConfig);
}
}
//===================================================================================
// Microsoft patterns & practices
// Guidance Automation Toolkit
//===================================================================================
// Copyright (c) Microsoft Corporation. All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===================================================================================
// License: MS-LPL
//===================================================================================

using System;
using Microsoft.Practices.ComponentModel;
using EnvDTE;
using System.Diagnostics;
using System.Xml;
using Microsoft.Practices.RecipeFramework.Configuration;
using System.IO;

namespace Microsoft.Practices.RecipeFramework.MetaGuidancePackage.Actions
{
/// <summary>
/// Adds a VSIX manifest project item based on the Guidance Package configuration file
/// </summary>
[ServiceDependency(typeof(DTE))]
public class AddVsixManifestAction : Action
{
/// <summary>
/// The guidance package project.
/// </summary>
[Input(Required = true)]
public Project PackageProject { get; set; }

/// <summary>
/// Does nothing, as un-registration must be done explicitly.
/// </summary>
public override void Undo()
{
// Must un-register to undo.
}

/// <summary>
/// Adds the vsix manifest to the guidance package project
/// </summary>
public override void Execute()
{
TraceUtil.TraceInformation(this, "Adding VSIX manifest...");

// Search the guidance package configuration file
var configurationFile = GetConfigurationFileName(this.PackageProject);

// Generate the vsix manifest content
var template = new VsixManifestTemplate();
template.GuidancePackage = Microsoft.Practices.RecipeFramework.GuidancePackage.ReadConfiguration(configurationFile);
template.ConfigurationFile = Path.GetFileName(configurationFile);

var vsixManifestContent = template.TransformText();

// Write the content
var targetManifestFile = Path.Combine(Path.GetDirectoryName(this.PackageProject.FullName), "source.extension.vsixmanifest");
File.WriteAllText(targetManifestFile, vsixManifestContent);

// Add the manifest to the guidance package project
var manifest = this.PackageProject.ProjectItems.AddFromFile(targetManifestFile);

// Set vsix manifest project item properties
manifest.Properties.Item("BuildAction").Value = 0;
manifest.Properties.Item("CopyToOutputDirectory").Value = 0;
manifest.Properties.Item("ItemType").Value = "None";
}

private string GetConfigurationFileName(Project project)
{
foreach (ProjectItem item in project.ProjectItems)
{
if (item.Name.EndsWith(".xml"))
{
using (XmlReader reader = XmlReader.Create(item.get_FileNames(1)))
{
reader.MoveToContent();
if (reader.LocalName == ElementNames.GuidancePackage &&
reader.NamespaceURI == SchemaInfo.PackageNamespace)
{
string file = Path.GetFileName(item.get_FileNames(1));

if (!Path.IsPathRooted(file))
{
file = Path.Combine(Path.GetDirectoryName(project.FileName), file);
}
return file;
}
}
}
}
throw new InvalidOperationException(Properties.Resources.Registration_NoPackageConfig);
}
}
}
173 changes: 85 additions & 88 deletions GAT/Src/Actions/IncludeContentInVsixAction.cs
Original file line number Diff line number Diff line change
@@ -1,89 +1,86 @@
//===================================================================================
// Microsoft patterns & practices
// Guidance Automation Toolkit
//===================================================================================
// Copyright (c) Microsoft Corporation. All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===================================================================================
// License: MS-LPL
//===================================================================================

using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.Practices.ComponentModel;
using EnvDTE;
using System.Diagnostics;

namespace Microsoft.Practices.RecipeFramework.MetaGuidancePackage.Actions
{
/// <summary>
/// Includes all content files in the vsix
/// </summary>
[ServiceDependency(typeof(DTE))]
public class IncludeContentInVsixAction : Action, IServiceProvider
{
/// <summary>
/// The target project
/// </summary>
[Input(Required = true)]
public Project Project { get; set; }

/// <summary>
/// Does nothing, as un-registration must be done explicitly.
/// </summary>
public override void Undo()
{
// Must un-register to undo.
}

/// <summary>
/// Includes all content files in the vsix
/// </summary>
public override void Execute()
{
Trace.TraceInformation("Incluiding content in vsix...");

foreach (ProjectItem item in Utils.FindProjectItems(this.Project.ProjectItems,ContentItemsFilter))
{
Utils.SetIncludeInVsix(this, item, true);
}
}

private Predicate<ProjectItem> ContentItemsFilter
{
get
{
return item =>
{
try
{
if (item.Kind == EnvDTE.Constants.vsProjectItemKindPhysicalFile)
{
if ("Content".Equals(item.Properties.Item("ItemType").Value) &&
(int)item.Properties.Item("BuildAction").Value == 2 &&
(uint)item.Properties.Item("CopyToOutputDirectory").Value > 0)
{
return true;
}
}
}
catch (Exception ex)
{
Trace.TraceWarning(ex.Message);
}

return false;
};
}
}

object IServiceProvider.GetService(Type serviceType)
{
return this.GetService(serviceType);
}
}
//===================================================================================
// Microsoft patterns & practices
// Guidance Automation Toolkit
//===================================================================================
// Copyright (c) Microsoft Corporation. All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===================================================================================
// License: MS-LPL
//===================================================================================

using System;
using Microsoft.Practices.ComponentModel;
using EnvDTE;

namespace Microsoft.Practices.RecipeFramework.MetaGuidancePackage.Actions
{
/// <summary>
/// Includes all content files in the vsix
/// </summary>
[ServiceDependency(typeof(DTE))]
public class IncludeContentInVsixAction : Action, IServiceProvider
{
/// <summary>
/// The target project
/// </summary>
[Input(Required = true)]
public Project Project { get; set; }

/// <summary>
/// Does nothing, as un-registration must be done explicitly.
/// </summary>
public override void Undo()
{
// Must un-register to undo.
}

/// <summary>
/// Includes all content files in the vsix
/// </summary>
public override void Execute()
{
TraceUtil.TraceInformation(this, "Incluiding content in vsix...");

foreach (ProjectItem item in Utils.FindProjectItems(this.Project.ProjectItems,ContentItemsFilter))
{
Utils.SetIncludeInVsix(this, item, true);
}
}

private Predicate<ProjectItem> ContentItemsFilter
{
get
{
return item =>
{
try
{
if (item.Kind == EnvDTE.Constants.vsProjectItemKindPhysicalFile)
{
if ("Content".Equals(item.Properties.Item("ItemType").Value) &&
(int)item.Properties.Item("BuildAction").Value == 2 &&
(uint)item.Properties.Item("CopyToOutputDirectory").Value > 0)
{
return true;
}
}
}
catch (Exception ex)
{
TraceUtil.TraceWarning(this, ex.Message);
}

return false;
};
}
}

object IServiceProvider.GetService(Type serviceType)
{
return this.GetService(serviceType);
}
}
}
Loading