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 @@ -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)

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

@ -54,7 +54,7 @@ namespace CSharpBinding @@ -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);
}

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

@ -26,7 +26,7 @@ namespace ICSharpCode.ILAsmBinding @@ -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)

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

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

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

@ -232,7 +232,7 @@ namespace ICSharpCode.WixBinding @@ -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));
}
/// <summary>

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

@ -711,6 +711,7 @@ @@ -711,6 +711,7 @@
<EmbeddedResource Include="Resources\IncrementalSearchCursor.cur" />
<EmbeddedResource Include="Resources\ReverseIncrementalSearchCursor.cur" />
<Compile Include="Src\Gui\Dialogs\SharpDevelopColorDialog.cs" />
<Compile Include="Src\Project\MSBuildImport.cs" />
</ItemGroup>
<ItemGroup>
<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 @@ -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;
}
}
};

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

@ -161,11 +161,13 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -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) {

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

@ -27,8 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -27,8 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project
protected Dictionary<string, PropertyGroup> configurations = new Dictionary<string, PropertyGroup>();
protected Dictionary<string, PropertyGroup> userConfigurations = new Dictionary<string, PropertyGroup>();
protected List<ProjectItem> items = new List<ProjectItem>();
protected List<string> imports = new List<string>();
readonly List<ProjectItem> items = new List<ProjectItem>();
readonly List<ProjectSection> projectSections = new List<ProjectSection>();
string fileName;
@ -117,7 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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 @@ -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)]
public string FileName {
get {
@ -737,8 +723,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -737,8 +723,6 @@ namespace ICSharpCode.SharpDevelop.Project
item.Dispose();
}
items.Clear();
imports.Clear();
}
#endregion

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

@ -0,0 +1,52 @@ @@ -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 @@ -24,8 +24,23 @@ namespace ICSharpCode.SharpDevelop.Project
{
List<string> unknownXmlSections = new List<string>();
List<string> userUnknownXmlSections = new List<string>();
List<MSBuildImport> imports = new List<MSBuildImport>();
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()
{
}
@ -106,7 +121,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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 @@ -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 @@ -224,7 +243,7 @@ namespace ICSharpCode.SharpDevelop.Project
List<ProjectItem> projectFiles = new List<ProjectItem>();
List<ProjectItem> other = new List<ProjectItem>();
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 @@ -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 @@ -476,7 +498,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void Clean(MSBuildEngineCallback callback, IDictionary<string, string> additionalProperties)
{
RunMSBuild("Clean", callback, additionalProperties);
isDirty = true;
this.IsDirty = true;
}
public override void Publish(MSBuildEngineCallback callback, IDictionary<string, string> additionalProperties)

Loading…
Cancel
Save