我想在VS2010插件中“模拟”右键单击/更新服务引用命令。我有一个包含(Silverlight ...)项目的引用,我知道服务引用的名称和服务的URL。
我发现了这个:http://dedjo.blogspot.com/2007/03/adding-web-references-to-your-vs.html,但它只适用于asmx(它使用System.Web.Services而不是System.ServiceModel),而不是wcf。
是否有任何选择但从代码中调用svcutil?如果是这样,怎么样? (我是否使用svcutil或slsvcutil?如何从插件内部调用它?)
谢谢
答案 0 :(得分:8)
我相信visual studio命令是“Project.UpdateServiceReference
”。所以我猜你可以尝试选择你感兴趣的节点,并运行这个命令,如下所示:
envDTE.Windows.Item(vsWindowKindSolutionExplorer).Activate();
envDTE.ActiveWindow.Object.GetItem(@"MyProject\Service References\Proxy").Select(vsUISelectionType.vsUISelectionTypeSelect);
envDTE.ExecuteCommand("Project.UpdateServiceReference");
答案 1 :(得分:2)
如果您正在寻找更具编程性的方法,您可以执行以下操作。这种方法不需要使用DTE自动化层,它将改变用户的选择并执行命令。请注意,这是在具有IServiceProvider的VSPackage的上下文中,以便它可以将实例提供给核心Visual Studio接口等...
您也可以在Addin中执行此操作,但you'd need to get an 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);
}
}
}
}
}
}
我还建议您查看Visual Studio 2010 SDK的WCF Service Consumption Tools samples。