Browse Source

Fixed SD2-1025: Conditions on Import element in an MSBuild project are removed on saving the project

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1892 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
c9e2f44b1e
  1. 2
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs
  2. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  3. 2
      src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs
  4. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  5. 2
      src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs
  6. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  7. 10
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AbstractBuildOptions.cs
  8. 12
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
  9. 20
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  10. 52
      src/Main/Base/Project/Src/Project/MSBuildImport.cs
  11. 40
      src/Main/Base/Project/Src/Project/MSBuildProject.cs

2
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) void AddReference(string assembly)

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs

@ -54,7 +54,7 @@ namespace CSharpBinding
protected override void Create(ProjectCreateInformation information) protected override void Create(ProjectCreateInformation information)
{ {
base.Create(information); base.Create(information);
imports.Add(DefaultTargetsFile); this.Imports.Add(new MSBuildImport(DefaultTargetsFile));
SetProperty("Debug", null, "CheckForOverflowUnderflow", "True", PropertyStorageLocations.ConfigurationSpecific); SetProperty("Debug", null, "CheckForOverflowUnderflow", "True", PropertyStorageLocations.ConfigurationSpecific);
SetProperty("Release", null, "CheckForOverflowUnderflow", "False", PropertyStorageLocations.ConfigurationSpecific); SetProperty("Release", null, "CheckForOverflowUnderflow", "False", PropertyStorageLocations.ConfigurationSpecific);
} }

2
src/AddIns/BackendBindings/ILAsmBinding/Project/Src/ILAsmProject.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.ILAsmBinding
{ {
Language = "ILAsm"; Language = "ILAsm";
Create(info); 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) public override bool CanCompile(string fileName)

2
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs

@ -57,7 +57,7 @@ namespace VBNetBinding
{ {
InitVB(); InitVB();
Create(info); Create(info);
imports.Add(DefaultTargetsFile); this.Imports.Add(new MSBuildImport(DefaultTargetsFile));
} }
public override ParseProjectContent CreateProjectContent() public override ParseProjectContent CreateProjectContent()

2
src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs

@ -232,7 +232,7 @@ namespace ICSharpCode.WixBinding
configurations["Release|*"]["OutputPath"] = @"bin\Release\"; configurations["Release|*"]["OutputPath"] = @"bin\Release\";
FileName = Path.GetFullPath(information.OutputProjectFileName); FileName = Path.GetFullPath(information.OutputProjectFileName);
imports.Add(DefaultTargetsFile); this.Imports.Add(new MSBuildImport(DefaultTargetsFile));
} }
/// <summary> /// <summary>

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -711,6 +711,7 @@
<EmbeddedResource Include="Resources\IncrementalSearchCursor.cur" /> <EmbeddedResource Include="Resources\IncrementalSearchCursor.cur" />
<EmbeddedResource Include="Resources\ReverseIncrementalSearchCursor.cur" /> <EmbeddedResource Include="Resources\ReverseIncrementalSearchCursor.cur" />
<Compile Include="Src\Gui\Dialogs\SharpDevelopColorDialog.cs" /> <Compile Include="Src\Gui\Dialogs\SharpDevelopColorDialog.cs" />
<Compile Include="Src\Project\MSBuildImport.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj"> <ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

10
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 (needExtensions) {
if (defaultTargets.Equals(project.Imports[i], StringComparison.InvariantCultureIgnoreCase)) if (defaultTargets.Equals(import.Project, StringComparison.InvariantCultureIgnoreCase))
project.Imports[i] = extendedTargets; import.Project = extendedTargets;
} else { } else {
if (extendedTargets.Equals(project.Imports[i], StringComparison.InvariantCultureIgnoreCase)) if (extendedTargets.Equals(import.Project, StringComparison.InvariantCultureIgnoreCase))
project.Imports[i] = defaultTargets; import.Project = defaultTargets;
} }
} }
}; };

12
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs

@ -161,11 +161,13 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
} }
// Add Imports // Add Imports
if (clearExistingImports) { if (project is MSBuildProject) {
((AbstractProject)project).Imports.Clear(); if (clearExistingImports) {
} ((MSBuildProject)project).Imports.Clear();
foreach(string projectImport in projectImports) { }
((AbstractProject)project).Imports.Add(projectImport); foreach (string projectImport in projectImports) {
((MSBuildProject)project).Imports.Add(new MSBuildImport(projectImport));
}
} }
foreach (PropertyGroup pg in propertyGroups) { foreach (PropertyGroup pg in propertyGroups) {

20
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -27,8 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project
protected Dictionary<string, PropertyGroup> configurations = new Dictionary<string, PropertyGroup>(); protected Dictionary<string, PropertyGroup> configurations = new Dictionary<string, PropertyGroup>();
protected Dictionary<string, PropertyGroup> userConfigurations = new Dictionary<string, PropertyGroup>(); protected Dictionary<string, PropertyGroup> userConfigurations = new Dictionary<string, PropertyGroup>();
protected List<ProjectItem> items = new List<ProjectItem>(); readonly List<ProjectItem> items = new List<ProjectItem>();
protected List<string> imports = new List<string>();
readonly List<ProjectSection> projectSections = new List<ProjectSection>(); readonly List<ProjectSection> projectSections = new List<ProjectSection>();
string fileName; string fileName;
@ -117,7 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
protected bool isDirty = false; bool isDirty = false;
[Browsable(false)] [Browsable(false)]
public bool IsDirty { public bool IsDirty {
@ -164,19 +163,6 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
/// <summary>
/// Gets the list of MSBuild Imports.
/// </summary>
/// <returns>
/// List of Import filenames, <example>$(MSBuildBinPath)\Microsoft.VisualBasic.targets</example>
/// </returns>
[Browsable(false)]
public List<string> Imports {
get {
return imports;
}
}
[Browsable(false)] [Browsable(false)]
public string FileName { public string FileName {
get { get {
@ -737,8 +723,6 @@ namespace ICSharpCode.SharpDevelop.Project
item.Dispose(); item.Dispose();
} }
items.Clear(); items.Clear();
imports.Clear();
} }
#endregion #endregion

52
src/Main/Base/Project/Src/Project/MSBuildImport.cs

@ -0,0 +1,52 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// An &lt;Import&gt;-node in an MSBuild file.
/// </summary>
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;
}
}
}

40
src/Main/Base/Project/Src/Project/MSBuildProject.cs

@ -24,8 +24,23 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
List<string> unknownXmlSections = new List<string>(); List<string> unknownXmlSections = new List<string>();
List<string> userUnknownXmlSections = new List<string>(); List<string> userUnknownXmlSections = new List<string>();
List<MSBuildImport> imports = new List<MSBuildImport>();
protected char BuildConstantSeparator = ';'; protected char BuildConstantSeparator = ';';
/// <summary>
/// Gets the list of MSBuild Imports.
/// </summary>
/// <returns>
/// List of Import filenames, <example>$(MSBuildBinPath)\Microsoft.VisualBasic.targets</example>
/// </returns>
[Browsable(false)]
public List<MSBuildImport> Imports {
get {
return imports;
}
}
public MSBuildProject() public MSBuildProject()
{ {
} }
@ -106,7 +121,11 @@ namespace ICSharpCode.SharpDevelop.Project
ProjectItem.ReadItemGroup(reader, this, Items); ProjectItem.ReadItemGroup(reader, this, Items);
break; break;
case "Import": 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); Imports.Add(import);
break; break;
default: default:
@ -142,16 +161,16 @@ namespace ICSharpCode.SharpDevelop.Project
void ExpandWildcards() void ExpandWildcards()
{ {
for (int i = 0; i < items.Count; i++) { for (int i = 0; i < Items.Count; i++) {
ProjectItem item = items[i]; ProjectItem item = Items[i];
if (item.Include.IndexOf('*') >= 0 && item is FileProjectItem) { if (item.Include.IndexOf('*') >= 0 && item is FileProjectItem) {
items.RemoveAt(i--); Items.RemoveAt(i--);
try { try {
string path = Path.Combine(this.Directory, Path.GetDirectoryName(item.Include)); string path = Path.Combine(this.Directory, Path.GetDirectoryName(item.Include));
foreach (string file in System.IO.Directory.GetFiles(path, Path.GetFileName(item.Include))) { foreach (string file in System.IO.Directory.GetFiles(path, Path.GetFileName(item.Include))) {
ProjectItem n = item.Clone(); ProjectItem n = item.Clone();
n.Include = FileUtility.GetRelativePath(this.Directory, file); n.Include = FileUtility.GetRelativePath(this.Directory, file);
items.Insert(++i, n); Items.Insert(++i, n);
} }
} catch (Exception ex) { } catch (Exception ex) {
MessageService.ShowError(ex, "Error expanding wildcards in " + item.Include); MessageService.ShowError(ex, "Error expanding wildcards in " + item.Include);
@ -224,7 +243,7 @@ namespace ICSharpCode.SharpDevelop.Project
List<ProjectItem> projectFiles = new List<ProjectItem>(); List<ProjectItem> projectFiles = new List<ProjectItem>();
List<ProjectItem> other = new List<ProjectItem>(); List<ProjectItem> other = new List<ProjectItem>();
foreach (ProjectItem item in this.items) { foreach (ProjectItem item in this.Items) {
switch (item.ItemType) { switch (item.ItemType) {
case ItemType.Reference: case ItemType.Reference:
references.Add(item); references.Add(item);
@ -261,9 +280,12 @@ namespace ICSharpCode.SharpDevelop.Project
SaveUnknownXmlSections(writer, unknownXmlSections); SaveUnknownXmlSections(writer, unknownXmlSections);
foreach (string import in Imports) { foreach (MSBuildImport import in Imports) {
writer.WriteStartElement("Import"); 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(); writer.WriteEndElement();
} }
@ -476,7 +498,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void Clean(MSBuildEngineCallback callback, IDictionary<string, string> additionalProperties) public override void Clean(MSBuildEngineCallback callback, IDictionary<string, string> additionalProperties)
{ {
RunMSBuild("Clean", callback, additionalProperties); RunMSBuild("Clean", callback, additionalProperties);
isDirty = true; this.IsDirty = true;
} }
public override void Publish(MSBuildEngineCallback callback, IDictionary<string, string> additionalProperties) public override void Publish(MSBuildEngineCallback callback, IDictionary<string, string> additionalProperties)

Loading…
Cancel
Save