Browse Source

SD-1605 - Reimplement editing project and solution configurations

4.0
Daniel Grunwald 14 years ago
parent
commit
4a474f4b35
  1. 109
      src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

109
src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

@ -13,7 +13,6 @@ using System.Xml; @@ -13,7 +13,6 @@ using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project.Converter;
using Microsoft.Build.Construction;
using Microsoft.Build.Evaluation;
using Microsoft.Build.Exceptions;
@ -29,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -29,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// require locking on the SyncRoot. Methods that return underlying MSBuild objects require that
/// the caller locks on the SyncRoot.
/// </summary>
public class MSBuildBasedProject : AbstractProject, IProjectItemListProvider
public class MSBuildBasedProject : AbstractProject, IProjectItemListProvider, IProjectAllowChangeConfigurations
{
/// <summary>
/// The project collection that contains this project.
@ -1370,19 +1369,17 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1370,19 +1369,17 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion
#region IProjectAllowChangeConfigurations interface implementation
/*
bool IProjectAllowChangeConfigurations.RenameProjectConfiguration(string oldName, string newName)
{
lock (SyncRoot) {
foreach (MSBuild.BuildPropertyGroup g in project.PropertyGroups) {
if (g.IsImported) {
continue;
}
MSBuild.BuildProperty prop = MSBuildInternals.GetProperty(g, "Configuration");
if (prop != null && prop.Value == oldName) {
foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.Concat(userProjectFile.PropertyGroups)) {
// Rename the default configuration setting
var prop = g.Properties.FirstOrDefault(p => p.Name == "Configuration");
if (prop != null && prop.Value == oldName) {
prop.Value = newName;
}
// Rename the configuration in conditions
string gConfiguration, gPlatform;
MSBuildInternals.GetConfigurationAndPlatformFromCondition(g.Condition,
out gConfiguration,
@ -1399,15 +1396,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1399,15 +1396,14 @@ namespace ICSharpCode.SharpDevelop.Project
bool IProjectAllowChangeConfigurations.RenameProjectPlatform(string oldName, string newName)
{
lock (SyncRoot) {
foreach (MSBuild.BuildPropertyGroup g in project.PropertyGroups) {
if (g.IsImported) {
continue;
}
MSBuild.BuildProperty prop = MSBuildInternals.GetProperty(g, "Platform");
if (prop != null && prop.Value == oldName) {
foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.Concat(userProjectFile.PropertyGroups)) {
// Rename the default platform setting
var prop = g.Properties.FirstOrDefault(p => p.Name == "Platform");
if (prop != null && prop.Value == oldName) {
prop.Value = newName;
}
// Rename the platform in conditions
string gConfiguration, gPlatform;
MSBuildInternals.GetConfigurationAndPlatformFromCondition(g.Condition,
out gConfiguration,
@ -1424,27 +1420,30 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1424,27 +1420,30 @@ namespace ICSharpCode.SharpDevelop.Project
bool IProjectAllowChangeConfigurations.AddProjectConfiguration(string newName, string copyFrom)
{
lock (SyncRoot) {
bool copiedGroup = false;
bool copiedGroupInMainFile = false;
if (copyFrom != null) {
foreach (MSBuild.BuildPropertyGroup g
in project.PropertyGroups.Cast<MSBuild.BuildPropertyGroup>().ToList())
{
if (g.IsImported) {
continue;
foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.ToList()) {
string gConfiguration, gPlatform;
MSBuildInternals.GetConfigurationAndPlatformFromCondition(g.Condition,
out gConfiguration,
out gPlatform);
if (gConfiguration == copyFrom) {
CopyProperties(projectFile, g, newName, gPlatform);
copiedGroupInMainFile = true;
}
}
foreach (ProjectPropertyGroupElement g in userProjectFile.PropertyGroups.ToList()) {
string gConfiguration, gPlatform;
MSBuildInternals.GetConfigurationAndPlatformFromCondition(g.Condition,
out gConfiguration,
out gPlatform);
if (gConfiguration == copyFrom) {
CopyProperties(g, newName, gPlatform);
copiedGroup = true;
CopyProperties(userProjectFile, g, newName, gPlatform);
}
}
}
if (!copiedGroup) {
project.AddNewPropertyGroup(false).Condition = CreateCondition(newName, null);
if (!copiedGroupInMainFile) {
projectFile.AddPropertyGroup().Condition = CreateCondition(newName, null);
}
LoadConfigurationPlatformNamesFromMSBuild();
return true;
@ -1454,27 +1453,30 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1454,27 +1453,30 @@ namespace ICSharpCode.SharpDevelop.Project
bool IProjectAllowChangeConfigurations.AddProjectPlatform(string newName, string copyFrom)
{
lock (SyncRoot) {
bool copiedGroup = false;
bool copiedGroupInMainFile = false;
if (copyFrom != null) {
foreach (MSBuild.BuildPropertyGroup g
in project.PropertyGroups.Cast<MSBuild.BuildPropertyGroup>().ToList())
{
if (g.IsImported) {
continue;
foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.ToList()) {
string gConfiguration, gPlatform;
MSBuildInternals.GetConfigurationAndPlatformFromCondition(g.Condition,
out gConfiguration,
out gPlatform);
if (gPlatform == copyFrom) {
CopyProperties(projectFile, g, gConfiguration, newName);
copiedGroupInMainFile = true;
}
}
foreach (ProjectPropertyGroupElement g in userProjectFile.PropertyGroups.ToList()) {
string gConfiguration, gPlatform;
MSBuildInternals.GetConfigurationAndPlatformFromCondition(g.Condition,
out gConfiguration,
out gPlatform);
if (gPlatform == copyFrom) {
CopyProperties(g, gConfiguration, newName);
copiedGroup = true;
CopyProperties(userProjectFile, g, gConfiguration, newName);
}
}
}
if (!copiedGroup) {
project.AddNewPropertyGroup(false).Condition = CreateCondition(null, newName);
if (!copiedGroupInMainFile) {
projectFile.AddPropertyGroup().Condition = CreateCondition(null, newName);
}
LoadConfigurationPlatformNamesFromMSBuild();
return true;
@ -1484,12 +1486,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1484,12 +1486,12 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>
/// copy properties from g into a new property group for newConfiguration and newPlatform
/// </summary>
void CopyProperties(MSBuild.BuildPropertyGroup g, string newConfiguration, string newPlatform)
void CopyProperties(ProjectRootElement project, ProjectPropertyGroupElement g, string newConfiguration, string newPlatform)
{
MSBuild.BuildPropertyGroup ng = project.AddNewPropertyGroup(false);
ProjectPropertyGroupElement ng = project.AddPropertyGroup();
ng.Condition = CreateCondition(newConfiguration, newPlatform);
foreach (MSBuild.BuildProperty p in g) {
ng.AddNewProperty(p.Name, p.Value);
foreach (var p in g.Properties) {
ng.AddProperty(p.Name, p.Value).Condition = p.Condition;
}
}
@ -1506,14 +1508,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1506,14 +1508,8 @@ namespace ICSharpCode.SharpDevelop.Project
if (otherConfigurationName == null) {
throw new InvalidOperationException("cannot remove the last configuration");
}
foreach (MSBuild.BuildPropertyGroup g
in project.PropertyGroups.Cast<MSBuild.BuildPropertyGroup>().ToList())
{
if (g.IsImported) {
continue;
}
MSBuild.BuildProperty prop = MSBuildInternals.GetProperty(g, "Configuration");
foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.Concat(userProjectFile.PropertyGroups).ToList()) {
ProjectPropertyElement prop = g.Properties.FirstOrDefault(p => p.Name == "Configuration");
if (prop != null && prop.Value == name) {
prop.Value = otherConfigurationName;
}
@ -1523,7 +1519,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1523,7 +1519,7 @@ namespace ICSharpCode.SharpDevelop.Project
out gConfiguration,
out gPlatform);
if (gConfiguration == name) {
project.RemovePropertyGroup(g);
g.Parent.RemoveChild(g);
}
}
LoadConfigurationPlatformNamesFromMSBuild();
@ -1544,14 +1540,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1544,14 +1540,8 @@ namespace ICSharpCode.SharpDevelop.Project
if (otherPlatformName == null) {
throw new InvalidOperationException("cannot remove the last platform");
}
foreach (MSBuild.BuildPropertyGroup g
in project.PropertyGroups.Cast<MSBuild.BuildPropertyGroup>().ToList())
{
if (g.IsImported) {
continue;
}
MSBuild.BuildProperty prop = MSBuildInternals.GetProperty(g, "Platform");
foreach (ProjectPropertyGroupElement g in projectFile.PropertyGroups.Concat(userProjectFile.PropertyGroups).ToList()) {
ProjectPropertyElement prop = g.Properties.FirstOrDefault(p => p.Name == "Platform");
if (prop != null && prop.Value == name) {
prop.Value = otherPlatformName;
}
@ -1561,14 +1551,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1561,14 +1551,13 @@ namespace ICSharpCode.SharpDevelop.Project
out gConfiguration,
out gPlatform);
if (gPlatform == name) {
project.RemovePropertyGroup(g);
g.Parent.RemoveChild(g);
}
}
LoadConfigurationPlatformNamesFromMSBuild();
return true;
}
}
*/
#endregion
}
}

Loading…
Cancel
Save