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);
}
}