public override bool Equals(object obj) { // Do they reference the same element? if (Object.ReferenceEquals(this, obj)) { return(true); } MsBuildProjectElement msBuildProjElem = obj as MsBuildProjectElement; if (Object.ReferenceEquals(msBuildProjElem, null)) { return(false); } // Do they reference the same project? if (!ItemProject.Equals(msBuildProjElem.ItemProject)) { return(false); } // Do they have the same include? string include1 = GetMetadata(ProjectFileConstants.Include); string include2 = msBuildProjElem.GetMetadata(ProjectFileConstants.Include); // Unfortunately the checking for nulls have to be done again, since neither String.Equals nor String.Compare can handle nulls. // Virtual folders should not be handled here. if (include1 == null || include2 == null) { return(false); } return(String.Equals(include1, include2, StringComparison.OrdinalIgnoreCase)); }
/// <summary> /// Adds references to this container from a MSBuild project. /// </summary> public void LoadReferencesFromBuildProject(MSBuild.Project buildProject) { ProjectMgr.Site.GetUIThread().MustBeCalledFromUIThread(); foreach (string referenceType in SupportedReferenceTypes) { IEnumerable <MSBuild.ProjectItem> referencesGroup = this.ProjectMgr.BuildProject.GetItems(referenceType); bool isAssemblyReference = referenceType == ProjectFileConstants.Reference; // If the project was loaded for browsing we should still create the nodes but as not resolved. if (isAssemblyReference && (!ProjectMgr.BuildProject.Targets.ContainsKey(MsBuildTarget.ResolveAssemblyReferences) || this.ProjectMgr.Build(MsBuildTarget.ResolveAssemblyReferences) != MSBuildResult.Successful)) { continue; } foreach (MSBuild.ProjectItem item in referencesGroup) { ProjectElement element = new MsBuildProjectElement(this.ProjectMgr, item); ReferenceNode node = CreateReferenceNode(referenceType, element); if (node != null) { // Make sure that we do not want to add the item twice to the ui hierarchy // We are using here the UI representation of the Node namely the Caption to find that out, in order to // avoid different representation problems. // Example :<Reference Include="EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> // <Reference Include="EnvDTE80" /> bool found = false; for (HierarchyNode n = this.FirstChild; n != null && !found; n = n.NextSibling) { if (String.Compare(n.Caption, node.Caption, StringComparison.OrdinalIgnoreCase) == 0) { found = true; } } if (!found) { this.AddChild(node); } } } } }
/// <summary> /// Adds references to this container from a MSBuild project. /// </summary> public void LoadReferencesFromBuildProject(MSBuild.Project buildProject) { ProjectMgr.Site.GetUIThread().MustBeCalledFromUIThread(); foreach (string referenceType in SupportedReferenceTypes) { IEnumerable<MSBuild.ProjectItem> referencesGroup = this.ProjectMgr.BuildProject.GetItems(referenceType); bool isAssemblyReference = referenceType == ProjectFileConstants.Reference; // If the project was loaded for browsing we should still create the nodes but as not resolved. if (isAssemblyReference && (!ProjectMgr.BuildProject.Targets.ContainsKey(MsBuildTarget.ResolveAssemblyReferences) || this.ProjectMgr.Build(MsBuildTarget.ResolveAssemblyReferences) != MSBuildResult.Successful)) { continue; } foreach (MSBuild.ProjectItem item in referencesGroup) { ProjectElement element = new MsBuildProjectElement(this.ProjectMgr, item); ReferenceNode node = CreateReferenceNode(referenceType, element); if (node != null) { // Make sure that we do not want to add the item twice to the ui hierarchy // We are using here the UI representation of the Node namely the Caption to find that out, in order to // avoid different representation problems. // Example :<Reference Include="EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> // <Reference Include="EnvDTE80" /> bool found = false; for (HierarchyNode n = this.FirstChild; n != null && !found; n = n.NextSibling) { if (String.Compare(n.Caption, node.Caption, StringComparison.OrdinalIgnoreCase) == 0) { found = true; } } if (!found) { this.AddChild(node); } } } } }
/// <summary> /// Defines if the node has a name relation to its parent node /// e.g. Form1.ext and Form1.resx are name related (until first occurence of extention separator) /// </summary> #endregion #region ctor /// <summary> /// Constructor for the DependentFileNode /// </summary> /// <param name="root">Root of the hierarchy</param> /// <param name="e">Associated project element</param> internal DependentFileNode(ProjectNode root, MsBuildProjectElement element) : base(root, element) { this.HasParentNodeNameRelation = false; }
public override DependentFileNode CreateDependentFileNode(MsBuildProjectElement item) { DependentFileNode node = base.CreateDependentFileNode(item); if (null != node) { string include = item.GetMetadata(ProjectFileConstants.Include); if (IsCodeFile(include)) { node.OleServiceProvider.AddService( typeof(SVSMDCodeDomProvider), new OleServiceProvider.ServiceCreatorCallback(CreateServices), false); } } return node; }
/// <summary> /// Links a reference node to the project and hierarchy. /// </summary> protected override void BindReferenceData() { string relativePath = CommonUtils.GetRelativeFilePath(ProjectMgr.ProjectFolder, _filename); // If the item has not been set correctly like in case of a new reference added it now. // The constructor for the AssemblyReference node will create a default project item. In that case the Item is null. // We need to specify here the correct project element. if (ItemNode == null || ItemNode is VirtualProjectElement) { ItemNode = new MsBuildProjectElement(ProjectMgr, relativePath, ProjectFileConstants.Reference); } // Set the basic information we know about ItemNode.SetMetadata(ProjectFileConstants.Name, Path.GetFileName(_filename)); ItemNode.SetMetadata(PythonConstants.PythonExtension, relativePath); }
/// <summary> /// Links a reference node to the project and hierarchy. /// </summary> protected override void BindReferenceData() { Debug.Assert(_feed != null, "The _feed field has not been initialized"); // If the item has not been set correctly like in case of a new reference added it now. // The constructor for the AssemblyReference node will create a default project item. In that case the Item is null. // We need to specify here the correct project element. if (ItemNode == null || ItemNode is VirtualProjectElement) { ItemNode = new MsBuildProjectElement( ProjectMgr, _feed + "?" + _productId, ProjectFileConstants.WebPiReference ); } // Set the basic information we know about ItemNode.SetMetadata("Feed", _feed); ItemNode.SetMetadata("ProductId", _productId); ItemNode.SetMetadata("FriendlyName", _friendlyName); }