Если вы ищете более программный способ сделать это, вы можете сделать что-то вроде следующего.Этот подход не требует использования уровня автоматизации DTE, который изменит выбор пользователя и выполнит команду.Обратите внимание, что это в контексте VSPackage с IServiceProvider, так что он может получать экземпляры к основным интерфейсам Visual Studio и т. Д. *
Вы также можете сделать это из Addin, но вам нужно получить IServiceProvider и добавить ссылки (по крайней мере) на Microsoft.VisualStudio.Shell.Interop.dll и Microsoft.VisualStudio.WCFReference.Interop.Справочные сборки для этих двоичных файлов доступны в Visual Studio 2010 SDK .
IVsSolution solution = GetService(typeof(SVsSolution)) as IVsSolution;
if (solution != null)
{
IVsHierarchy solutionHierarchy = solution as IVsHierarchy;
if (null != solutionHierarchy)
{
IEnumHierarchies enumHierarchies;
Guid nullGuid = Guid.Empty;
ErrorHandler.ThrowOnFailure(solution.GetProjectEnum((uint)__VSENUMPROJFLAGS.EPF_ALLINSOLUTION, ref nullGuid, out enumHierarchies));
if (enumHierarchies != null)
{
uint fetched;
IVsHierarchy[] hierarchies = new IVsHierarchy[1];
IVsWCFReferenceManagerFactory wcfReferenceManagerFactory = GetService(typeof(SVsWCFReferenceManagerFactory)) as IVsWCFReferenceManagerFactory;
if (wcfReferenceManagerFactory != null)
{
while (enumHierarchies.Next(1, hierarchies, out fetched) == 0 && fetched == 1)
{
if (wcfReferenceManagerFactory.IsReferenceManagerSupported(hierarchies[0]) == 1)
{
IVsWCFReferenceManager referenceManager = wcfReferenceManagerFactory.GetReferenceManager(hierarchies[0]);
var referenceGroupCollection = referenceManager.GetReferenceGroupCollection();
referenceGroupCollection.UpdateAll(null);
}
}
}
}
}
}
Я бы также рекомендовал ознакомиться с примерами средств потребления услуг WCF для Visual Studio 2010 SDK.