protected override void OnExec() { IAssetReferenceService referenceservice = ServiceProvider.GetService <IAssetReferenceService>(true); IAssetReference reference = referenceservice.GetReferenceFor(recipe.Name, GetTarget()); if (reference == null) { throw new ArgumentNullException("reference"); } reference.Execute(); }
private void LoadInitialState() { if (this.template.ExtensionData.Recipe == null) { return; } DTE dte = (DTE)GetService(typeof(DTE)); IAssetReferenceService referenceService = (IAssetReferenceService) this.Package.GetService(typeof(IAssetReferenceService), false); if (referenceService != null) { IAssetReference templateAsset = null; try { object target = DteHelper.GetTarget(dte); templateAsset = referenceService.GetReferenceFor(this.Template.FileName, target); if (templateAsset == null) { if (this.Template.Kind == TemplateKind.Project && target is Project) // If the template is been unfolded, then check the parent folder { Project parentProject = (target as Project).ParentProjectItem.ContainingProject; if (parentProject != null) // Parent folder exist, check the reference to the template { templateAsset = referenceService.GetReferenceFor(this.Template.FileName, parentProject); } else // The parent folder is the solution root, check the reference in the solutioin root { templateAsset = referenceService.GetReferenceFor(this.Template.FileName, dte.Solution); } } } } catch (Exception) { templateAsset = null; } if (templateAsset != null) { IPersistenceService persistenceService = (IPersistenceService)this.Package.GetService(typeof(IPersistenceService), false); if (persistenceService != null) { IDictionary hashStored = persistenceService.LoadState(this.Template.PackageName, templateAsset); if (hashStored != null) { ArrayList toremove = new ArrayList(hashStored.Count); foreach (DictionaryEntry keyValuePair in hashStored) { if (this.templateDictionary.GetValue(keyValuePair.Key) == null) { try { this.templateDictionary.SetValue(keyValuePair.Key, keyValuePair.Value); } catch { string appliesTo; try { appliesTo = templateAsset.AppliesTo; } catch (Exception e) { Trace.TraceWarning(e.Message); appliesTo = Properties.Resources.Reference_AppliesToThrew; } // Invalid initial state should just be ignored. Trace.TraceWarning(Properties.Resources.Template_IgnoreKeyInitialState, keyValuePair.Key, templateAsset.AppliesTo); toremove.Add(keyValuePair.Key); } } } foreach (object key in toremove) { hashStored.Remove(key); } if (toremove.Count != 0) { // Save the updated one without the offending values. persistenceService.SaveState(this.template.PackageName, templateAsset, hashStored); } } } } } }