Come leggere il file web.config in una progettazione personalizzata di attività in un Workflow Service WF4
Domanda
Ho un servizio WF con un'attività personalizzata e un designer personalizzato (WPF). Voglio aggiungere una convalida che verificare la presenza di un certo valore nel file web.config.
In fase di runtime che posso sovraccarico CacheMetadata void (ActivityMetadata metadati) e quindi posso fare la convalida felicemente ci utilizzando System.Configuration.ConfigurationManager per leggere il file di configurazione.
Dato Voglio anche fare questo in fase di progettazione, ero alla ricerca di un modo per fare questo nella finestra di progettazione.
Soluzione
Ok ho una soluzione:
string GetWebConfigXml() {
string configXml = null;
Window window = null;
ProjectItem project = null;
ProjectItem configFile = null;
try {
EnvDTE.DTE dte = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(DTE)) as DTE;
if(dte == null) return null;
project = dte.Solution.FindProjectItem(dte.ActiveDocument.FullName);
configFile = (from ProjectItem childItem in project.ProjectItems
where childItem.Name.Equals("web.config", StringComparison.OrdinalIgnoreCase)
select childItem).FirstOrDefault();
if (configFile == null) return null;
if (!configFile.IsOpen) window = configFile.Open();
var selection = (TextSelection)configFile.Document.Selection;
selection.SelectAll();
configXml = selection.Text;
} finally {
//Clean up the COM stuff
if (window != null) {
window.Close(vsSaveChanges.vsSaveChangesNo);
window = null;
}
if (configFile != null) {
configFile = null;
}
if (project != null) {
project = null;
}
}
}
return configXml;
}
Nota: non dimenticare avrete probabilmente bisogno di una barca carica di catture try qui
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow