// // Copyright (c) Microsoft Corporation. All rights reserved. // namespace Microsoft.Build.Tasks.Xaml { using System; using System.Collections; using Microsoft.Build.Framework; // In Dev10, we allowed use of non-remotable ITaskItems. While there's not really any good scenario // for those, we need to support that for back-compat. So we wrap each provided TaskItems in an MBRO. internal class DelegatingTaskItem : MarshalByRefObject, ITaskItem { private ITaskItem underlyingItem; // This is different from TaskItem.ctor(ITaskItem): it's a wrapper, not a clone. // So any changes are propagated back to the original object. public DelegatingTaskItem(ITaskItem underlyingItem) { this.underlyingItem = underlyingItem; } public string ItemSpec { get { return this.underlyingItem.ItemSpec; } set { this.underlyingItem.ItemSpec = value; } } public int MetadataCount { get { return this.underlyingItem.MetadataCount; } } public ICollection MetadataNames { get { return this.underlyingItem.MetadataNames; } } public IDictionary CloneCustomMetadata() { return this.underlyingItem.CloneCustomMetadata(); } public void CopyMetadataTo(ITaskItem destinationItem) { this.underlyingItem.CopyMetadataTo(destinationItem); } public string GetMetadata(string metadataName) { return this.underlyingItem.GetMetadata(metadataName); } public void RemoveMetadata(string metadataName) { this.underlyingItem.RemoveMetadata(metadataName); } public void SetMetadata(string metadataName, string metadataValue) { this.underlyingItem.SetMetadata(metadataName, metadataValue); } } }