diff options
Diffstat (limited to 'mcs/class/Microsoft.Build/Microsoft.Build.Construction/ProjectItemElement.cs')
-rw-r--r-- | mcs/class/Microsoft.Build/Microsoft.Build.Construction/ProjectItemElement.cs | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Construction/ProjectItemElement.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Construction/ProjectItemElement.cs index 02a1a6ec49..5b13e20240 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Construction/ProjectItemElement.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Construction/ProjectItemElement.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.Build.Internal; using System.Xml; +using Microsoft.Build.Exceptions; namespace Microsoft.Build.Construction { @@ -61,6 +62,14 @@ namespace Microsoft.Build.Construction } string @remove; public string Remove { get { return @remove ?? String.Empty; } set { @remove = value; } } + #if NET_4_5 + string keepDuplicates; + public string KeepDuplicates { get { return keepDuplicates ?? String.Empty; } set { keepDuplicates = value; } } + string keepMetadata; + public string KeepMetadata { get { return keepMetadata ?? String.Empty; } set { keepMetadata = value; } } + string removeMetadata; + public string RemoveMetadata { get { return removeMetadata ?? String.Empty; } set { removeMetadata = value; } } + #endif public ProjectMetadataElement AddMetadata (string name, string unevaluatedValue) { var metadata = ContainingProject.CreateMetadataElement (name, unevaluatedValue); @@ -74,9 +83,15 @@ namespace Microsoft.Build.Construction { SaveAttribute (writer, "Include", Include); SaveAttribute (writer, "Exclude", Exclude); +#if NET_4_5 + SaveAttribute (writer, "KeepDuplicates", KeepDuplicates); + SaveAttribute (writer, "KeepMetadata", KeepMetadata); + SaveAttribute (writer, "RemoveMetadata", RemoveMetadata); +#endif SaveAttribute (writer, "Remove", Remove); base.SaveValue (writer); } + internal override void LoadAttribute (string name, string value) { switch (name) { @@ -86,6 +101,17 @@ namespace Microsoft.Build.Construction case "Exclude": Exclude = value; break; +#if NET_4_5 + case "KeepDuplicates": + KeepDuplicates = value; + break; + case "KeepMetadata": + KeepMetadata = value; + break; + case "RemoveMetadata": + RemoveMetadata = value; + break; +#endif case "Remove": Remove = value; break; @@ -94,11 +120,30 @@ namespace Microsoft.Build.Construction break; } } - internal override ProjectElement LoadChildElement (string name) + internal override void LoadValue (XmlReader reader) + { + if (string.IsNullOrWhiteSpace (Include) && string.IsNullOrEmpty (Remove)) + throw new InvalidProjectFileException (Location, null, string.Format ("Both Include and Remove attribute are null or empty on '{0}' item", ItemType)); + base.LoadValue (reader); + } + internal override ProjectElement LoadChildElement (XmlReader reader) { - var metadata = ContainingProject.CreateMetadataElement (name); + var metadata = ContainingProject.CreateMetadataElement (reader.LocalName); AppendChild (metadata); return metadata; } +#if NET_4_5 + public ElementLocation ExcludeLocation { get; private set; } + public ElementLocation IncludeLocation { get; private set; } + public ElementLocation KeepDuplicatesLocation { get; private set; } + public ElementLocation RemoveLocation { get; private set; } + public ElementLocation RemoveMetadataLocation { get; private set; } +#else + ElementLocation ExcludeLocation { get; set; } + ElementLocation IncludeLocation { get; set; } + ElementLocation KeepDuplicatesLocation { get; set; } + ElementLocation RemoveLocation { get; set; } + ElementLocation RemoveMetadataLocation { get; set; } +#endif } } |