public virtual void InvalidateGroup() { // Set keyOutput to null so that a refresh will be performed the next time // a property getter is called. if (null != _keyOutput) { // Once the group is invalidated there is no more reason to listen for events. _project.OnProjectPropertyChanged -= new EventHandler<ProjectPropertyChangedArgs>(OnProjectPropertyChanged); } _keyOutput = null; }
protected virtual void Refresh() { // Let MSBuild know which configuration we are working with _project.SetConfiguration(_projectCfg.ConfigName); // Generate dependencies if such a task exist const string generateDependencyList = "AllProjectOutputGroups"; if (_project.BuildProject.Targets.ContainsKey(generateDependencyList)) { //bool succeeded = false; //project.BuildTarget(generateDependencyList, out succeeded); //Debug.Assert(succeeded, "Failed to build target: " + generateDependencyList); } // Rebuild the content of our list of output string outputType = this._targetName + "Output"; this._outputs.Clear(); if (_project.CurrentConfig != null) { foreach (MSBuildExecution.ProjectItemInstance assembly in _project.CurrentConfig.GetItems(outputType)) { Output output = new Output(_project, assembly); _outputs.Add(output); // See if it is our key output if (_keyOutput == null || String.Compare(assembly.GetMetadataValue("IsKeyOutput"), true.ToString(), StringComparison.OrdinalIgnoreCase) == 0) { _keyOutput = output; } } } _project.SetCurrentConfiguration(); // Now that the group is built we have to check if it is invalidated by a property // change on the project. _project.OnProjectPropertyChanged += new EventHandler<ProjectPropertyChangedArgs>(OnProjectPropertyChanged); }
public virtual int get_KeyOutputObject(out IVsOutput2 ppKeyOutput) { if (_keyOutput == null) { Refresh(); if (_keyOutput == null) { // horrible hack: we don't really have outputs but the Cider designer insists // that we have an output so it can figure out our output assembly name. So we // lie here, and then lie again to give a path in Output.get_Property _keyOutput = new Output(_project, null); } } ppKeyOutput = _keyOutput; if (ppKeyOutput == null) return VSConstants.S_FALSE; return VSConstants.S_OK; }