ProjectMetadata Class


An evaluated design-time metadatum. Parented either by a ProjectItemDefinition or a ProjectItem.

public ref class ProjectMetadata : IEquatable<Microsoft::Build::Evaluation::ProjectMetadata ^>
public class ProjectMetadata : IEquatable<Microsoft.Build.Evaluation.ProjectMetadata>
type ProjectMetadata = class
    interface IEquatable<ProjectMetadata>
Public Class ProjectMetadata
Implements IEquatable(Of ProjectMetadata)


Never used to represent built-in metadata, like %(Filename). There is always a backing XML object.



Location of the condition attribute


Gets the evaluated metadata value. Cannot be set directly: only the unevaluated value can be set. Is never null.


If the metadatum originated in an imported file, returns true. Otherwise returns false.


The item type of the parent item definition or item.


Location of the element


Name of the metadata


Any immediately previous metadatum (from item definition or item) that was overridden by this one during evaluation. This would include all metadata with the same name that lie above in the logical project file, who are on item definitions of the same type, and whose conditions evaluated to true. If this metadatum is on an item, it would include any previous metadatum with the same name on the same item whose condition evaluated to true, and following that any item definition metadata. If there are none above this is null. If the project has not been reevaluated since the last modification this value may be incorrect.


Project that this metadatum lives in. ProjectMetadata's always live in a project.


Gets or sets the unevaluated metadata value.

As well as updating the unevaluated value, the setter updates the evaluated value, but does not affect anything else in the project until reevaluation. For example, --if a piece of metadata named "m" is modified on item of type "i", it does not affect "j" which is evaluated from "@(j->'%(m)')" until reevaluation. --if the unevaluated value of "m" is set to something that is modified by evaluation, such as "$(p)", the evaluated value will be set to "$(p)" until reevaluation. This is a convenience that it is understood does not necessarily leave the project in a perfectly self consistent state.

Setting metadata through a ProjectItem may cause the underlying ProjectItemElement to be split, if it originated with an itemlist, wildcard, or semicolon expression, because it was clear that the caller intended to only affect that particular item. Setting metadata through a ProjectMetadata does not cause any splitting, because we assume the caller presumably intends to affect all items using the underlying ProjectMetadataElement. At least, this seems a reasonable assumption, and it avoids the need for metadata to hold a pointer to their containing items.


Backing XML metadata. Can never be null.

Explicit Interface Implementations


Compares this metadata to another for equivalence.

Applies to