Cosmos/source2/VSIP/Cosmos.VS.Package/VSProjectNode.cs

162 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.Project;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using Microsoft.VisualStudio.Shell.Interop;
namespace Cosmos.VS.Package
{
public class VSProjectNode : ProjectNode
{
internal static int imageIndex;
public override int ImageIndex
{
get { return imageIndex; }
}
private VSProject package;
public VSProjectNode(VSProject package)
{
LogUtility.LogString("Entering Cosmos.VS.Package.VSProjectNode.ctor(VSProject");
try
{
this.package = package;
imageIndex = this.ImageHandler.ImageList.Images.Count;
foreach (Image img in imageList.Images)
{
this.ImageHandler.AddImage(img);
}
}
catch (Exception E)
{
LogUtility.LogException(E);
}
finally
{
LogUtility.LogString("Exiting Cosmos.VS.Package.VSProjectNode.ctor(VSProject)");
}
}
public override MSBuildResult Build(uint vsopts, string config, IVsOutputWindowPane output, string target)
{
var xReferenceContainer = GetReferenceContainer();
return base.Build(vsopts, config, output, target);
}
protected override MSBuildResult InvokeMsBuild(string target)
{
var xSolutionBuildManager = (IVsSolutionBuildManager)this.GetService(typeof(IVsSolutionBuildManager));
var xSolution = (IVsSolution)this.GetService(typeof(IVsSolution));
if (xSolutionBuildManager != null && xSolution != null)
{
IVsHierarchy xStartupProj;
xSolutionBuildManager.get_StartupProject(out xStartupProj);
if (xStartupProj != null)
{
var xProj = xStartupProj as IVsProject3;
Guid xGuid;
xSolution.GetGuidOfProject(xStartupProj, out xGuid);
if (xGuid != Guid.Empty)
{
if (xGuid != this.ProjectIDGuid)
{
return MSBuildResult.Successful;
}
}
}
}
return base.InvokeMsBuild(target);
}
private static ImageList imageList;
protected override ConfigProvider CreateConfigProvider()
{
LogUtility.LogString("Entering Cosmos.VS.Package.VSProjectNode.CreateConfigProvider()");
try
{
return new VsConfigProvider(this);
}
finally
{
LogUtility.LogString("Exiting Cosmos.VS.Package.VSProjectNode.CreateConfigProvider()");
}
}
protected override Guid[] GetConfigurationIndependentPropertyPages()
{
// Default C# property pages
// Unfortunately just adding them to the list does not work.
// It causes AV's, but its specific to each page
// loading and getting confused under a different project type
//5E9A8AC2-4F34-4521-858F-4C248BA31532 - Application
//43E38D2E-43B8-4204-8225-9357316137A4 - Services
//031911C8-6148-4E25-B1B1-44BCA9A0C45C - Reference Paths
//F8D6553F-F752-4DBF-ACB6-F291B744A792 - Signing
//1E78F8DB-6C07-4D61-A18F-7514010ABD56 - Build Events
LogUtility.LogString("Entering Cosmos.VS.Package.VSProjectNode.GetConfigurationIndependentPropertyPages()");
try
{
return new Guid[] {
// typeof(PropPageEnvironment).GUID,
//typeof(PropPageTest).GUID,
typeof(KernelPage).GUID,
typeof(BuildPage).GUID,
typeof(DebugPage).GUID,
typeof(VMPage).GUID,
};
}
finally
{
LogUtility.LogString("Exiting Cosmos.VS.Package.VSProjectNode.GetConfigurationIndependentPropertyPages()");
}
}
static VSProjectNode()
{
imageList = Utilities.GetImageList(typeof(VSProjectNode).Assembly.GetManifestResourceStream("Cosmos.VS.Package.Resources.CosmosProjectNode.bmp"));
}
public override Guid ProjectGuid
{
get { return Guids.guidProjectFactory; }
}
public override string ProjectType
{
get { return "CosmosProjectType"; }
}
public override void AddFileFromTemplate(
string source, string target)
{
LogUtility.LogString("Entering Cosmos.VS.Package.VSProjectNode.AddFileFromTemplate('{0}', '{1}')", source, target);
try
{
string nameSpace =
this.FileTemplateProcessor.GetFileNamespace(target, this);
string className = Path.GetFileNameWithoutExtension(target);
this.FileTemplateProcessor.AddReplace("$nameSpace$", nameSpace);
this.FileTemplateProcessor.AddReplace("$className$", className);
this.FileTemplateProcessor.UntokenFile(source, target);
this.FileTemplateProcessor.Reset();
}
catch (Exception E)
{
LogUtility.LogException(E);
}
finally
{
LogUtility.LogString("Exiting Cosmos.VS.Package.VSProjectNode.AddFileFromTemplate");
}
}
}
}