public MSBuildProjectInstance (MSBuildProject project) { msproject = project; evaluatedItemsIgnoringCondition = new List<IMSBuildItemEvaluated> (); evaluatedProperties = new MSBuildEvaluatedPropertyCollection (msproject); if (!project.SolutionDirectory.IsNullOrEmpty) globalProperties.Add ("SolutionDir", project.SolutionDirectory.ToString ()); }
void SyncBuildProject (Dictionary<string,MSBuildItem> currentItems, MSBuildEngine e, object project) { evaluatedItemsIgnoringCondition.Clear (); evaluatedItems.Clear (); if (!OnlyEvaluateProperties) { var evalItems = new Dictionary<string,MSBuildItemEvaluated> (); foreach (var it in e.GetEvaluatedItems (project)) { var xit = it as MSBuildItemEvaluated; if (xit == null) { xit = CreateEvaluatedItem (e, it); var itemId = e.GetItemMetadata (it, NodeIdPropertyName); var key = itemId + " " + xit.Include; if (evalItems.ContainsKey (key)) continue; // xbuild seems to return duplicate items when using wildcards. This is a workaround to avoid the duplicates. MSBuildItem pit; if (!string.IsNullOrEmpty (itemId) && currentItems.TryGetValue (itemId, out pit)) { xit.SourceItem = pit; xit.Condition = pit.Condition; evalItems [key] = xit; } } evaluatedItems.Add (xit); } var evalItemsNoCond = new Dictionary<string,MSBuildItemEvaluated> (); foreach (var it in e.GetEvaluatedItemsIgnoringCondition (project)) { var xit = it as MSBuildItemEvaluated; if (xit == null) { xit = CreateEvaluatedItem (e, it); var itemId = e.GetItemMetadata (it, NodeIdPropertyName); MSBuildItemEvaluated evItem; var key = itemId + " " + xit.Include; if (evalItemsNoCond.ContainsKey (key)) continue; // xbuild seems to return duplicate items when using wildcards. This is a workaround to avoid the duplicates. if (!string.IsNullOrEmpty (itemId) && evalItems.TryGetValue (key, out evItem)) { evaluatedItemsIgnoringCondition.Add (evItem); evalItemsNoCond [key] = evItem; continue; } MSBuildItem pit; if (!string.IsNullOrEmpty (itemId) && currentItems.TryGetValue (itemId, out pit)) { xit.SourceItem = pit; xit.Condition = pit.Condition; evalItemsNoCond [key] = xit; } } evaluatedItemsIgnoringCondition.Add (xit); } // Clear the node id metadata foreach (var it in evaluatedItems.Concat (evaluatedItemsIgnoringCondition)) ((MSBuildPropertyGroupEvaluated)it.Metadata).RemoveProperty (NodeIdPropertyName); targets = e.GetTargets (project).ToArray (); } var props = new MSBuildEvaluatedPropertyCollection (msproject); evaluatedProperties = props; props.SyncCollection (e, project); conditionedProperties = engine.GetConditionedProperties (project); }