Browse Source

An MSBuild project item's include can now be treated as a literal. Project templates can now choose whether a project item's include value is escaped.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2574 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 18 years ago
parent
commit
f66a2533c0
  1. 4
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
  2. 12
      src/Main/Base/Project/Src/Project/Items/ProjectItem.cs
  3. 10
      src/Main/Base/Project/Src/Project/Items/UnknownProjectItem.cs
  4. 2
      src/Main/Base/Project/Src/Project/MSBuildInternals.cs

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

@ -142,10 +142,12 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -142,10 +142,12 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
void LoadProjectItems(XmlElement projectItemsElement)
{
bool escapeIncludeValue = String.Equals(projectItemsElement.GetAttribute("escapeValue"), "false", StringComparison.OrdinalIgnoreCase);
foreach (XmlElement projectItemElement in ChildElements(projectItemsElement)) {
ProjectItem item = new UnknownProjectItem(null,
projectItemElement.Name,
projectItemElement.GetAttribute("Include"));
projectItemElement.GetAttribute("Include"),
escapeIncludeValue);
foreach (XmlElement metadataElement in ChildElements(projectItemElement)) {
item.SetMetadata(metadataElement.Name, metadataElement.InnerText);
}

12
src/Main/Base/Project/Src/Project/Items/ProjectItem.cs

@ -31,6 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -31,6 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
IProject project;
volatile string fileNameCache;
bool treatIncludeAsLiteral;
// either use: (bound mode)
BuildItem buildItem;
@ -54,11 +55,17 @@ namespace ICSharpCode.SharpDevelop.Project @@ -54,11 +55,17 @@ namespace ICSharpCode.SharpDevelop.Project
}
protected ProjectItem(IProject project, ItemType itemType, string include)
: this(project, itemType, include, false)
{
}
protected ProjectItem(IProject project, ItemType itemType, string include, bool treatIncludeAsLiteral)
{
this.project = project;
this.virtualItemType = itemType;
this.virtualInclude = include ?? "";
this.virtualMetadata = new Dictionary<string, string>();
this.treatIncludeAsLiteral = treatIncludeAsLiteral;
}
[Browsable(false)]
@ -68,6 +75,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -68,6 +75,11 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public bool TreatIncludeAsLiteral {
get { return treatIncludeAsLiteral; }
set { treatIncludeAsLiteral = value; }
}
/// <summary>
/// Gets the object used for synchronization. This is project.SyncRoot for items inside a project; or
/// virtualMetadata for items without project.

10
src/Main/Base/Project/Src/Project/Items/UnknownProjectItem.cs

@ -23,8 +23,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -23,8 +23,16 @@ namespace ICSharpCode.SharpDevelop.Project
/// Constructor for internal use in ProjectDescriptor.
/// </summary>
internal UnknownProjectItem(IProject project, string itemType, string include)
: base(project, new ItemType(itemType), include)
: this(project, itemType, include, false)
{
}
/// <summary>
/// Constructor for internal use in ProjectDescriptor.
/// </summary>
internal UnknownProjectItem(IProject project, string itemType, string include, bool treatIncludeAsLiteral)
: base(project, new ItemType(itemType), include, treatIncludeAsLiteral)
{
}
}
}

2
src/Main/Base/Project/Src/Project/MSBuildInternals.cs

@ -75,7 +75,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -75,7 +75,7 @@ namespace ICSharpCode.SharpDevelop.Project
throw new ArgumentNullException("item");
if (item.IsAddedToProject)
throw new ArgumentException("item is already added to project", "item");
MSBuild.BuildItem newItem = group.AddNewItem(item.ItemType.ToString(), item.Include, true);
MSBuild.BuildItem newItem = group.AddNewItem(item.ItemType.ToString(), item.Include, item.TreatIncludeAsLiteral);
foreach (string name in item.MetadataNames) {
newItem.SetMetadata(name, item.GetMetadata(name));
}

Loading…
Cancel
Save