diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs index f4b8aa3edb..2cc33e1a2a 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs @@ -58,7 +58,7 @@ namespace Grunwald.BooBinding } } } - imports.Add("$(BooBinPath)\\Boo.Microsoft.Build.targets"); + this.Imports.Add(new MSBuildImport("$(BooBinPath)\\Boo.Microsoft.Build.targets")); } 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 4e12489d4b..4aa56e15ad 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs @@ -54,7 +54,7 @@ namespace CSharpBinding protected override void Create(ProjectCreateInformation information) { base.Create(information); - imports.Add(DefaultTargetsFile); + this.Imports.Add(new MSBuildImport(DefaultTargetsFile)); SetProperty("Debug", null, "CheckForOverflowUnderflow", "True", PropertyStorageLocations.ConfigurationSpecific); SetProperty("Release", null, "CheckForOverflowUnderflow", "False", PropertyStorageLocations.ConfigurationSpecific); } diff --git a/src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs b/src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs index cee826f933..53861aad37 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 { Language = "ILAsm"; Create(info); - imports.Add(@"$(SharpDevelopBinPath)\SharpDevelop.Build.MSIL.Targets"); + this.Imports.Add(new MSBuildImport(@"$(SharpDevelopBinPath)\SharpDevelop.Build.MSIL.Targets")); } public override bool CanCompile(string fileName) diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs index 1386bcd909..48330a9f36 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs @@ -57,7 +57,7 @@ namespace VBNetBinding { InitVB(); Create(info); - imports.Add(DefaultTargetsFile); + this.Imports.Add(new MSBuildImport(DefaultTargetsFile)); } public 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 f64b9f09a5..b846663b1d 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs @@ -232,7 +232,7 @@ namespace ICSharpCode.WixBinding configurations["Release|*"]["OutputPath"] = @"bin\Release\"; FileName = Path.GetFullPath(information.OutputProjectFileName); - imports.Add(DefaultTargetsFile); + this.Imports.Add(new MSBuildImport(DefaultTargetsFile)); } /// diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index d37b519adb..33342e8913 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -711,6 +711,7 @@ + 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 7b7fc44b60..2158b02e27 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 @@ -252,13 +252,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels } } } - for (int i = 0; i < project.Imports.Count; i++) { + foreach (MSBuildImport import in project.Imports) { if (needExtensions) { - if (defaultTargets.Equals(project.Imports[i], StringComparison.InvariantCultureIgnoreCase)) - project.Imports[i] = extendedTargets; + if (defaultTargets.Equals(import.Project, StringComparison.InvariantCultureIgnoreCase)) + import.Project = extendedTargets; } else { - if (extendedTargets.Equals(project.Imports[i], StringComparison.InvariantCultureIgnoreCase)) - project.Imports[i] = defaultTargets; + if (extendedTargets.Equals(import.Project, StringComparison.InvariantCultureIgnoreCase)) + import.Project = defaultTargets; } } }; 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 648fd798df..3fadaf040c 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs @@ -161,11 +161,13 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates } // Add Imports - if (clearExistingImports) { - ((AbstractProject)project).Imports.Clear(); - } - foreach(string projectImport in projectImports) { - ((AbstractProject)project).Imports.Add(projectImport); + if (project is MSBuildProject) { + if (clearExistingImports) { + ((MSBuildProject)project).Imports.Clear(); + } + foreach (string projectImport in projectImports) { + ((MSBuildProject)project).Imports.Add(new MSBuildImport(projectImport)); + } } foreach (PropertyGroup pg in propertyGroups) { diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 8bede43846..f4a08952c3 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -27,8 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project protected Dictionary configurations = new Dictionary(); protected Dictionary userConfigurations = new Dictionary(); - protected List items = new List(); - protected List imports = new List(); + readonly List items = new List(); readonly List projectSections = new List(); string fileName; @@ -117,7 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project } } - protected bool isDirty = false; + bool isDirty = false; [Browsable(false)] public bool IsDirty { @@ -164,19 +163,6 @@ namespace ICSharpCode.SharpDevelop.Project } } - /// - /// Gets the list of MSBuild Imports. - /// - /// - /// List of Import filenames, $(MSBuildBinPath)\Microsoft.VisualBasic.targets - /// - [Browsable(false)] - public List Imports { - get { - return imports; - } - } - [Browsable(false)] public string FileName { get { @@ -737,8 +723,6 @@ namespace ICSharpCode.SharpDevelop.Project item.Dispose(); } items.Clear(); - - imports.Clear(); } #endregion diff --git a/src/Main/Base/Project/Src/Project/MSBuildImport.cs b/src/Main/Base/Project/Src/Project/MSBuildImport.cs new file mode 100644 index 0000000000..e3839fce39 --- /dev/null +++ b/src/Main/Base/Project/Src/Project/MSBuildImport.cs @@ -0,0 +1,52 @@ +// +// +// +// +// $Revision$ +// + +using System; + +namespace ICSharpCode.SharpDevelop.Project +{ + /// + /// An <Import>-node in an MSBuild file. + /// + public class MSBuildImport : ICloneable + { + string project; + string condition; + + public string Project { + get { + return project; + } + set { + if (value == null) + throw new ArgumentNullException("value"); + project = value; + } + } + + public string Condition { + get { + return condition; + } + set { + condition = value; + } + } + + public MSBuildImport(string project) + { + this.Project = project; + } + + public object Clone() + { + MSBuildImport n = new MSBuildImport(this.Project); + n.Condition = this.Condition; + return n; + } + } +} diff --git a/src/Main/Base/Project/Src/Project/MSBuildProject.cs b/src/Main/Base/Project/Src/Project/MSBuildProject.cs index cdd542d9aa..5651f0d7e2 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildProject.cs @@ -24,8 +24,23 @@ namespace ICSharpCode.SharpDevelop.Project { List unknownXmlSections = new List(); List userUnknownXmlSections = new List(); + List imports = new List(); + protected char BuildConstantSeparator = ';'; + /// + /// Gets the list of MSBuild Imports. + /// + /// + /// List of Import filenames, $(MSBuildBinPath)\Microsoft.VisualBasic.targets + /// + [Browsable(false)] + public List Imports { + get { + return imports; + } + } + public MSBuildProject() { } @@ -106,7 +121,11 @@ namespace ICSharpCode.SharpDevelop.Project ProjectItem.ReadItemGroup(reader, this, Items); break; case "Import": - string import = ProjectItem.MSBuildUnescape(reader.GetAttribute("Project")); + string project = reader.GetAttribute("Project"); + MSBuildImport import = new MSBuildImport(ProjectItem.MSBuildUnescape(project)); + if (reader.GetAttribute("Condition") != null) { + import.Condition = reader.GetAttribute("Condition"); + } Imports.Add(import); break; default: @@ -142,16 +161,16 @@ namespace ICSharpCode.SharpDevelop.Project void ExpandWildcards() { - for (int i = 0; i < items.Count; i++) { - ProjectItem item = items[i]; + for (int i = 0; i < Items.Count; i++) { + ProjectItem item = Items[i]; if (item.Include.IndexOf('*') >= 0 && item is FileProjectItem) { - items.RemoveAt(i--); + Items.RemoveAt(i--); try { string path = Path.Combine(this.Directory, Path.GetDirectoryName(item.Include)); foreach (string file in System.IO.Directory.GetFiles(path, Path.GetFileName(item.Include))) { ProjectItem n = item.Clone(); n.Include = FileUtility.GetRelativePath(this.Directory, file); - items.Insert(++i, n); + Items.Insert(++i, n); } } catch (Exception ex) { MessageService.ShowError(ex, "Error expanding wildcards in " + item.Include); @@ -224,7 +243,7 @@ namespace ICSharpCode.SharpDevelop.Project List projectFiles = new List(); List other = new List(); - foreach (ProjectItem item in this.items) { + foreach (ProjectItem item in this.Items) { switch (item.ItemType) { case ItemType.Reference: references.Add(item); @@ -261,9 +280,12 @@ namespace ICSharpCode.SharpDevelop.Project SaveUnknownXmlSections(writer, unknownXmlSections); - foreach (string import in Imports) { + foreach (MSBuildImport import in Imports) { writer.WriteStartElement("Import"); - writer.WriteAttributeString("Project", ProjectItem.MSBuildEscape(import)); + writer.WriteAttributeString("Project", ProjectItem.MSBuildEscape(import.Project)); + if (import.Condition != null) { + writer.WriteAttributeString("Condition", import.Condition); + } writer.WriteEndElement(); } @@ -476,7 +498,7 @@ namespace ICSharpCode.SharpDevelop.Project public override void Clean(MSBuildEngineCallback callback, IDictionary additionalProperties) { RunMSBuild("Clean", callback, additionalProperties); - isDirty = true; + this.IsDirty = true; } public override void Publish(MSBuildEngineCallback callback, IDictionary additionalProperties)