我有一个带有自定义活动和自定义设计器 (WPF) 的 WF 服务。我想添加一个验证,以检查 web.config 文件中是否存在某些值。
在运行时,我可以重载void CacheMetadata(ActivityMetadata metadata),因此我可以在那里使用System.Configuration.ConfigurationManager愉快地进行验证来读取配置文件。
由于我也想在设计时这样做,所以我一直在寻找一种在设计器中执行此操作的方法。
我有一个带有自定义活动和自定义设计器 (WPF) 的 WF 服务。我想添加一个验证,以检查 web.config 文件中是否存在某些值。
在运行时,我可以重载void CacheMetadata(ActivityMetadata metadata),因此我可以在那里使用System.Configuration.ConfigurationManager愉快地进行验证来读取配置文件。
由于我也想在设计时这样做,所以我一直在寻找一种在设计器中执行此操作的方法。
好的,我有一个解决方案:
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;
}
注意:别忘了你在这里可能需要一大堆的try catchs