From 4ca90a7a92b537eea1e52717d7dd194b7fcb40cc Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 17 Nov 2006 22:49:30 +0000 Subject: [PATCH] Support "AvailableItemName" - the list of build actions available for files is read from the imported .targets files. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2049 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Boo/BooBinding/Project/BooBinding.csproj | 1 - .../Boo/BooBinding/Project/Src/BooProject.cs | 2 +- .../Project/Src/Project/CSharpProject.cs | 2 +- .../ILAsmBinding/Project/ILAsmBinding.csproj | 1 - .../ILAsmBinding/Project/Src/ILAsmProject.cs | 2 +- .../Project/Src/Project/VBNetProject.cs | 2 +- .../Project/Src/Project/WixProject.cs | 2 +- .../Src/Gui/Dialogs/NewProjectDialog.cs | 37 ++++----- .../ProjectOptions/AbstractBuildOptions.cs | 4 +- .../Templates/Project/CombineDescriptor.cs | 1 - .../Templates/Project/ProjectDescriptor.cs | 2 + .../Project/Src/Project/AbstractProject.cs | 18 ++++- .../Project/Src/Project/CompilableProject.cs | 2 + src/Main/Base/Project/Src/Project/IProject.cs | 7 ++ .../Src/Project/Items/FileProjectItem.cs | 31 ++++++-- .../Project/Src/Project/Items/ItemType.cs | 6 +- .../Src/Project/MSBuildBasedProject.cs | 75 ++++++++++++++++--- .../Project/Src/Project/MSBuildInternals.cs | 16 +++- .../Src/TextEditor/Gui/Dialogs/GotoDialog.cs | 2 +- 19 files changed, 159 insertions(+), 54 deletions(-) diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj index 9bd0407a64..52b2bcb394 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj @@ -57,7 +57,6 @@ ..\..\RequiredLibraries\Boo.Lang.Useful.dll False - diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs index 7366046aac..0def19b574 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs @@ -64,7 +64,7 @@ namespace Grunwald.BooBinding } } } - this.MSBuildProject.AddNewImport("$(BooBinPath)\\Boo.Microsoft.Build.targets", null); + this.AddImport("$(BooBinPath)\\Boo.Microsoft.Build.targets", null); } void AddReference(string assembly) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs index 6ba67ce2b3..f168a76570 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs @@ -62,7 +62,7 @@ namespace CSharpBinding protected override void Create(ProjectCreateInformation information) { base.Create(information); - this.MSBuildProject.AddNewImport(DefaultTargetsFile, null); + this.AddImport(DefaultTargetsFile, null); SetProperty("Debug", null, "CheckForOverflowUnderflow", "True", PropertyStorageLocations.ConfigurationSpecific, true); SetProperty("Release", null, "CheckForOverflowUnderflow", "False", diff --git a/src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.csproj b/src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.csproj index 918a04e59a..70c494ddfd 100644 --- a/src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.csproj +++ b/src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.csproj @@ -40,7 +40,6 @@ - diff --git a/src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs b/src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs index 75314e8d60..976e23fba4 100644 --- a/src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs +++ b/src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs @@ -26,7 +26,7 @@ namespace ICSharpCode.ILAsmBinding : base(info.Solution) { Create(info); - this.MSBuildProject.AddNewImport(@"$(SharpDevelopBinPath)\SharpDevelop.Build.MSIL.Targets", null); + this.AddImport(@"$(SharpDevelopBinPath)\SharpDevelop.Build.MSIL.Targets", null); } public override string Language { diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs index 0c3bf3557a..49ad2e2e1c 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs @@ -68,7 +68,7 @@ namespace VBNetBinding SetProperty("Release", null, "DefineConstants", "TRACE=1", PropertyStorageLocations.ConfigurationSpecific, true); - this.MSBuildProject.AddNewImport(DefaultTargetsFile, null); + this.AddImport(DefaultTargetsFile, null); } protected override ParseProjectContent CreateProjectContent() diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs index c489bbf8e4..2e60af97f7 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs @@ -240,7 +240,7 @@ namespace ICSharpCode.WixBinding AddGuardedProperty("ToolPath", "$(WixToolPath)", false); AddGuardedProperty("WixMSBuildExtensionsPath", wixToolPath, false); - this.MSBuildProject.AddNewImport(DefaultTargetsFile, null); + this.AddImport(DefaultTargetsFile, null); } /// diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs b/src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs index 4200c56e22..5023690543 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs @@ -7,6 +7,7 @@ using System; using System.Collections; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.IO; @@ -27,9 +28,11 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs { protected Container components = new System.ComponentModel.Container(); - protected ArrayList alltemplates = new ArrayList(); - protected ArrayList categories = new ArrayList(); - protected Hashtable icons = new Hashtable(); + protected List alltemplates = new List(); + protected List categories = new List(); + + // icon resource name => image index + protected Dictionary icons = new Dictionary(); protected bool createNewSolution; @@ -48,10 +51,6 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs Icon = null; } - public NewProjectDialog() - { - } - protected virtual void InitializeView() { ImageList smalllist = new ImageList(); @@ -68,10 +67,10 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs // load the icons and set their index from the image list in the hashtable int i = 0; - Hashtable tmp = new Hashtable(icons); + Dictionary tmp = new Dictionary(icons); - foreach (DictionaryEntry entry in icons) { - Bitmap bitmap = IconService.GetBitmap(entry.Key.ToString()); + foreach (KeyValuePair entry in icons) { + Bitmap bitmap = IconService.GetBitmap(entry.Key); if (bitmap != null) { smalllist.Images.Add(bitmap); imglist.Images.Add(bitmap); @@ -87,7 +86,7 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs if (item.Template.Icon == null) { item.ImageIndex = 0; } else { - item.ImageIndex = (int)icons[item.Template.Icon]; + item.ImageIndex = icons[item.Template.Icon]; } } @@ -100,7 +99,7 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs SelectLastSelectedCategoryNode(((TreeView)ControlDictionary["categoryTreeView"]).Nodes, PropertyService.Get("Dialogs.NewProjectDialog.LastSelectedCategory", "C#")); } - void InsertCategories(TreeNode node, ArrayList catarray) + void InsertCategories(TreeNode node, IEnumerable catarray) { foreach (Category cat in catarray) { if (node == null) { @@ -145,6 +144,10 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs protected virtual void InitializeTemplates() { foreach (ProjectTemplate template in ProjectTemplate.ProjectTemplates) { + if (template.ProjectDescriptor == null && createNewSolution == false) { + // Do not show solution template when added a new project to existing solution + continue; + } TemplateItem titem = new TemplateItem(template); if (titem.Template.Icon != null) { icons[titem.Template.Icon] = 0; // "create template icon" @@ -409,9 +412,9 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs /// public class Category : TreeNode, ICategory { - ArrayList categories = new ArrayList(); - ArrayList templates = new ArrayList(); - int sortOrder = TemplateCategorySortOrderFile.UndefinedSortOrder; + List categories = new List(); + List templates = new List(); + int sortOrder = TemplateCategorySortOrderFile.UndefinedSortOrder; public Category(string name) : this(name, TemplateCategorySortOrderFile.UndefinedSortOrder) { @@ -432,12 +435,12 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs sortOrder = value; } } - public ArrayList Categories { + public List Categories { get { return categories; } } - public ArrayList Templates { + public List Templates { get { return templates; } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs index 1230093cd9..33ef12147c 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs @@ -247,13 +247,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels if (needExtensions) { if (defaultTargets.Equals(import.ProjectPath, StringComparison.InvariantCultureIgnoreCase)) { //import.ProjectPath = extendedTargets; - MSBuildInternals.SetImportProjectPath(project.MSBuildProject, import, extendedTargets); + MSBuildInternals.SetImportProjectPath(project, import, extendedTargets); break; } } else { if (extendedTargets.Equals(import.ProjectPath, StringComparison.InvariantCultureIgnoreCase)) { //import.ProjectPath = defaultTargets; - MSBuildInternals.SetImportProjectPath(project.MSBuildProject, import, defaultTargets); + MSBuildInternals.SetImportProjectPath(project, import, defaultTargets); break; } } diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/CombineDescriptor.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/CombineDescriptor.cs index e0aeb46762..aba69c9dda 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/CombineDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/CombineDescriptor.cs @@ -54,7 +54,6 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates return false; newProject.Location = FileUtility.GetRelativePath(projectCreateInformation.SolutionPath, newProject.FileName); parentFolder.AddFolder(newProject); - projectCreateInformation.CreatedProjects.Add(newProject.FileName); } return true; } diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs index a6899ed88e..27d0ec204b 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs @@ -294,6 +294,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates foreach (Import projectImport in projectImports) { ((MSBuildBasedProject)project).MSBuildProject.AddNewImport(projectImport.Key, projectImport.Value); } + ((MSBuildBasedProject)project).CreateItemsListFromMSBuild(); } if (projectProperties.Count > 0) { @@ -359,6 +360,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates project.Save(); } + projectCreateInformation.CreatedProjects.Add(project.FileName); return project; } finally diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 2458dad467..ce7128dc56 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -7,10 +7,11 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Collections.ObjectModel; -using System.IO; +using System.ComponentModel; using System.Diagnostics; +using System.IO; + using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; @@ -42,6 +43,7 @@ namespace ICSharpCode.SharpDevelop.Project #region IDisposable implementation bool isDisposed; + [Browsable(false)] public bool IsDisposed { get { return isDisposed; } } @@ -198,12 +200,14 @@ namespace ICSharpCode.SharpDevelop.Project } } + [Browsable(false)] public virtual ICollection ConfigurationNames { get { return new string[] { "Debug", "Release" }; } } + [Browsable(false)] public virtual ICollection PlatformNames { get { return new string[] { "AnyCPU" }; @@ -222,6 +226,16 @@ namespace ICSharpCode.SharpDevelop.Project } #endregion + /// + /// Gets the list of available file item types. + /// + public virtual ICollection AvailableFileItemTypes { + get { + return ItemType.DefaultFileItems; + } + } + + [Browsable(false)] public virtual ReadOnlyCollection Items { get { return new ReadOnlyCollection(new ProjectItem[0]); diff --git a/src/Main/Base/Project/Src/Project/CompilableProject.cs b/src/Main/Base/Project/Src/Project/CompilableProject.cs index fa997815cd..1eef84d938 100644 --- a/src/Main/Base/Project/Src/Project/CompilableProject.cs +++ b/src/Main/Base/Project/Src/Project/CompilableProject.cs @@ -94,6 +94,7 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Gets the path where temporary files are written to during compilation. /// + [Browsable(false)] public string IntermediateOutputFullPath { get { string outputPath = GetProperty("IntermediateOutputPath"); @@ -112,6 +113,7 @@ namespace ICSharpCode.SharpDevelop.Project /// Gets the full path to the xml documentation file generated by the project, or /// null if no xml documentation is being generated. /// + [Browsable(false)] public string DocumentationFileFullPath { get { string file = GetProperty("DocumentationFile"); diff --git a/src/Main/Base/Project/Src/Project/IProject.cs b/src/Main/Base/Project/Src/Project/IProject.cs index 9e459b2740..17df9658f5 100644 --- a/src/Main/Base/Project/Src/Project/IProject.cs +++ b/src/Main/Base/Project/Src/Project/IProject.cs @@ -39,6 +39,13 @@ namespace ICSharpCode.SharpDevelop.Project /// The full path to the file to determine the item type for ItemType GetDefaultItemType(string fileName); + /// + /// Gets the list of available file item types. + /// + ICollection AvailableFileItemTypes { + get; + } + /// /// Gets a list of project sections stored in the solution file for this project. /// diff --git a/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs index 0f4ea6678e..d613bfd98a 100644 --- a/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs @@ -6,11 +6,13 @@ // using System; +using System.Collections.Generic; using System.ComponentModel; -using System.IO; using System.Drawing.Design; +using System.IO; using System.Windows.Forms; using System.Windows.Forms.Design; + using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Widgets.DesignTimeSupport; @@ -48,6 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project [LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectFile.BuildAction}", Description ="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectFile.BuildAction.Description}")] + [Editor(typeof(BuildActionEditor), typeof(UITypeEditor))] public string BuildAction { get { return this.ItemType.ItemName; @@ -57,18 +60,36 @@ namespace ICSharpCode.SharpDevelop.Project } } - /* + sealed class BuildActionEditor : DropDownEditor + { + protected override Control CreateDropDownControl(ITypeDescriptorContext context, IWindowsFormsEditorService editorService) + { + FileProjectItem item = context.Instance as FileProjectItem; + if (item != null && item.Project != null) { + return new DropDownEditorListBox(editorService, GetNames(item.Project.AvailableFileItemTypes)); + } else { + return new DropDownEditorListBox(editorService, GetNames(ItemType.DefaultFileItems)); + } + } + + static IEnumerable GetNames(IEnumerable itemTypes) + { + return Linq.Select( + itemTypes, delegate(ItemType it) { return it.ItemName; } + ); + } + } + [LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectFile.CopyToOutputDirectory}", Description = "${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectFile.CopyToOutputDirectory.Description}")] public CopyToOutputDirectory CopyToOutputDirectory { get { - return base.Properties.Get("CopyToOutputDirectory", CopyToOutputDirectory.Never); + return GetEvaluatedMetadata("CopyToOutputDirectory", CopyToOutputDirectory.Never); } set { - base.Properties.Set("CopyToOutputDirectory", value); + SetEvaluatedMetadata("CopyToOutputDirectory", value); } } - */ [LocalizedProperty("${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectFile.CustomTool}", Description ="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectFile.CustomTool.Description}")] diff --git a/src/Main/Base/Project/Src/Project/Items/ItemType.cs b/src/Main/Base/Project/Src/Project/Items/ItemType.cs index 437fa033c9..f5a1242589 100644 --- a/src/Main/Base/Project/Src/Project/Items/ItemType.cs +++ b/src/Main/Base/Project/Src/Project/Items/ItemType.cs @@ -40,10 +40,8 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Gets a collection of item types that are used for files. /// - public static readonly ReadOnlyCollectionWrapper FileItems - = new Set(Compile, EmbeddedResource, None, Content, - ApplicationDefinition, Page, BootstrapperFile - ).AsReadOnly(); + public static readonly ReadOnlyCollectionWrapper DefaultFileItems + = new Set(Compile, EmbeddedResource, None, Content).AsReadOnly(); public static readonly ItemType Resource = new ItemType("Resource"); public static readonly ItemType Folder = new ItemType("Folder"); diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index f0ae473981..a668c77801 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -8,13 +8,14 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.ComponentModel; using System.IO; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Internal.Templates; using MSBuild = Microsoft.Build.BuildEngine; -using StringPair = ICSharpCode.SharpDevelop.Pair; +using StringPair = ICSharpCode.SharpDevelop.Pair; namespace ICSharpCode.SharpDevelop.Project { @@ -48,6 +49,7 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Gets the underlying MSBuild project. /// + [Browsable(false)] public MSBuild.Project MSBuildProject { get { return project; } } @@ -80,9 +82,6 @@ namespace ICSharpCode.SharpDevelop.Project case "Resource": case "Content": case "Folder": - case "BootstrapperFile": - case "ApplicationDefinition": - case "Page": return new FileProjectItem(this, item); case "WebReferenceUrl": @@ -92,12 +91,29 @@ namespace ICSharpCode.SharpDevelop.Project return new WebReferencesProjectItem(this, item); default: - return base.CreateProjectItem(item); + if (this.AvailableFileItemTypes.Contains(new ItemType(item.Name)) + || SafeFileExists(this.Directory, item.Include)) + { + return new FileProjectItem(this, item); + } else { + return base.CreateProjectItem(item); + } + } + } + + static bool SafeFileExists(string directory, string fileName) + { + try { + return File.Exists(Path.Combine(directory, fileName)); + } catch (Exception) { + return false; } } protected virtual void Create(ProjectCreateInformation information) { + InitializeMSBuildProject(); + Name = information.ProjectName; FileName = information.OutputProjectFileName; @@ -129,6 +145,16 @@ namespace ICSharpCode.SharpDevelop.Project newGroup.AddNewProperty(name, value, treatValueAsLiteral).Condition = " '$(" + name + ")' == '' "; } + /// + /// Adds an MSBuild import to the project, refreshes the list of available item names + /// and recreates the project items. + /// + protected void AddImport(string projectFile, string condition) + { + project.AddNewImport(projectFile, condition); + CreateItemsListFromMSBuild(); + } + #region Get Property /// /// Retrieves the evaluated property '' from the @@ -586,6 +612,7 @@ namespace ICSharpCode.SharpDevelop.Project #region IProjectItemListProvider interface List items = new List(); ReadOnlyCollection itemsReadOnly; + ICollection availableFileItemTypes = ItemType.DefaultFileItems; public override ReadOnlyCollection Items { get { @@ -593,12 +620,32 @@ namespace ICSharpCode.SharpDevelop.Project } } - void CreateItemsListFromMSBuild() + /// + /// Gets the list of available file item types. + /// + public override ICollection AvailableFileItemTypes { + get { + return availableFileItemTypes; + } + } + + /// + /// re-creates the list of project items and the list of available item types + /// + internal void CreateItemsListFromMSBuild() { foreach (ProjectItem item in items) { item.Dispose(); } items.Clear(); + + Set availableFileItemTypes = new Set(); + availableFileItemTypes.AddRange(ItemType.DefaultFileItems); + foreach (MSBuild.BuildItem item in project.GetEvaluatedItemsByName("AvailableItemName")) { + availableFileItemTypes.Add(new ItemType(item.Include)); + } + this.availableFileItemTypes = availableFileItemTypes.AsReadOnly(); + foreach (MSBuild.BuildItem item in project.EvaluatedItems) { if (item.IsImported) continue; @@ -625,8 +672,8 @@ namespace ICSharpCode.SharpDevelop.Project } if (g[0].Name == "Reference") continue; - if (ItemType.FileItems.Contains(new ItemType(g[0].Name))) { - if (ItemType.FileItems.Contains(item.ItemType)) { + if (ItemType.DefaultFileItems.Contains(new ItemType(g[0].Name))) { + if (ItemType.DefaultFileItems.Contains(item.ItemType)) { MSBuildInternals.AddItemToGroup(g, item); return; } else { @@ -724,15 +771,21 @@ namespace ICSharpCode.SharpDevelop.Project #region Loading protected bool isLoading; + void InitializeMSBuildProject() + { + project.GlobalProperties.SetProperty("BuildingInsideVisualStudio", "true"); + foreach (KeyValuePair pair in MSBuildEngine.MSBuildProperties) { + project.GlobalProperties.SetProperty(pair.Key, pair.Value, true); + } + } + protected virtual void LoadProject(string fileName) { isLoading = true; try { this.FileName = fileName; - foreach (KeyValuePair pair in MSBuildEngine.MSBuildProperties) { - project.GlobalProperties.SetProperty(pair.Key, pair.Value, true); - } + InitializeMSBuildProject(); project.Load(fileName); this.ActiveConfiguration = GetProperty("Configuration") ?? this.ActiveConfiguration; diff --git a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs index 3368e1c0aa..86f6601618 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs @@ -67,7 +67,7 @@ namespace ICSharpCode.SharpDevelop.Project } #endregion - public static void AddItemToGroup(MSBuild.BuildItemGroup group, ProjectItem item) + internal static void AddItemToGroup(MSBuild.BuildItemGroup group, ProjectItem item) { if (group == null) throw new ArgumentNullException("group"); @@ -191,7 +191,7 @@ namespace ICSharpCode.SharpDevelop.Project /// WARNING: EvaluateCondition might add a temporary property group and remove it again, /// which invalidates enumerators over the list of property groups! /// - public static bool EvaluateCondition(MSBuild.Project project, + internal static bool EvaluateCondition(MSBuild.Project project, string condition) { const string propertyName = "MSBuildInternalsEvaluateConditionDummyPropertyName"; @@ -236,16 +236,24 @@ namespace ICSharpCode.SharpDevelop.Project /// Note: this methods causes the project to recreate all imports, so existing import /// instances might not be affected. /// - public static void SetImportProjectPath(MSBuild.Project project, MSBuild.Import import, + public static void SetImportProjectPath(MSBuildBasedProject project, MSBuild.Import import, string newRawPath) { + if (project == null) + throw new ArgumentNullException("project"); + if (import == null) + throw new ArgumentNullException("import"); + if (newRawPath == null) + throw new ArgumentNullException("newRawPath"); + XmlAttribute a = (XmlAttribute)typeof(MSBuild.Import).InvokeMember( "ProjectPathAttribute", BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, import, null ); a.Value = newRawPath; - EndXmlManipulation(project); + EndXmlManipulation(project.MSBuildProject); + project.CreateItemsListFromMSBuild(); } public static IEnumerable GetCustomMetadataNames(MSBuild.BuildItem item) diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs index 5cfd08f45c..bbe9ff4123 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs @@ -195,7 +195,7 @@ namespace ICSharpCode.SharpDevelop.Gui if (ProjectService.OpenSolution != null) { foreach (IProject project in ProjectService.OpenSolution.Projects) { foreach (ProjectItem item in project.Items) { - if (ItemType.FileItems.Contains(item.ItemType)) { + if (item is FileProjectItem) { AddSourceFile(text, lineNumber, item); } }