Tag: visual studio extensions

将鼠标侧按钮绑定到VisualStudio操作

我尝试将XButton 1和2(鼠标的侧面按钮)重定向到特定的Visual Studio操作。 当我按下XButton1时,我想编译项目/构建它。 默认情况下,此操作绑定到F6 。 当我按下XButton2时,我想在代码和设计视图(WinForms)之间切换。 这与F7绑定。 在使用Visual Studio内置工具多次尝试后,我使用AutoHotKey创建了以下脚本: XButton2:: IfWinActive Microsoft Visual Studio { Send {F7} return } XButton1:: IfWinActive Microsoft Visual Studio { Send {F6} return } 但是,我想知道是否有人知道使用Visual Studio 2015实现相同的本地方式?

Roslyn加载项目文档失败

在Visual Studio扩展(VSIX)解决方案中,我使用Roslyn从当前解决方案加载特定项目: Project myProject = this.CurrentComponentModel.GetService() .CurrentSolution.Projects .FirstOrDefault(p => p.Name == “MyProject”) 项目myProject肯定是加载的,但在检查时我看到: myProject.HasDocuments == false myProject.Documents is Empty 然而,在Visual Studio中,我可以看到大量文档。 如果我关闭解决方案并从另一个TFS分支打开相同的解决方案,则相同的代码返回: myProject.HasDocuments == true myProject.Documents is not Empty 有任何想法吗?

VS Extension:TextPoint.GreaterThan / LessThan对于大文件来说非常慢

我正在研究VS扩展,它需要知道文本光标当前位于哪个类成员(方法,属性等)。 它还需要父母的意识(例如,类,嵌套类等)。 它需要知道成员或类的类型,名称和行号。 当我说“类型”时我的意思是“方法”或“属性”不一定是“.NET类型”。 目前我在这里使用此代码: public static class CodeElementHelper { public static CodeElement[] GetCodeElementAtCursor(DTE2 dte) { try { var cursorTextPoint = GetCursorTextPoint(dte); if (cursorTextPoint != null) { var activeDocument = dte.ActiveDocument; var projectItem = activeDocument.ProjectItem; var codeElements = projectItem.FileCodeModel.CodeElements; return GetCodeElementAtTextPoint(codeElements, cursorTextPoint).ToArray(); } } catch (Exception ex) { Debug.WriteLine(“[DBG][EXC] – ” + ex.Message + ” […]

在Visual Studio中有一种方法可以轻松获得合格的类型名称吗?

我正在寻找一个扩展/进程来获取Visual Studio中对象的程序集限定类型名称。 我知道你可以写一个快速的控制台应用程序输出这个但发现它是一个笨拙的过程。 理想情况下,我希望能够右键单击类型名称,并可以选择将其程序集限定名复制到剪贴板,以便粘贴到我的DI Container的配置文件中。

通过NuGet安装的自定义测试适配器没有发现测试

我正在尝试通过NuGet安装自定义测试适配器,但似乎VS无法识别它。 我查看了Microsoft.VisualStudio.TestWindow.VsAdapters.UnitTestExtensionDiscoverer中的代码,所以我意识到dll必须以* .TestAdapter.dll结尾。 使用该名称使得vstest.console在我指定/ TestAdapterPath时对我有用,所以我不确定为什么VS2013测试窗口没有显示我的测试。 通过将相关文件复制到C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ Extensions,适配器在安装时可以正常工作。 我需要遵循VS2013加载测试适配器的其他路径或文件名约定吗? 没有任何日志记录或错误消息我真的不知道如何收集更多信息来调试它。

枚举当前visual studio项目中的所有文件

我正在尝试编写一个简单的Visual Studio 2012扩展。 我已经生成了扩展模板,可以从工具菜单中弹出一个对话框。 我想枚举当前打开的项目中的所有文件,然后根据一些规则过滤它们。 我正在寻找的是一个返回IEnumerable的代码片段。 FileHandle应具有以下接口或类似的东西。 interface IFileHandle { // Return the string string Path; // Open the file in the editor void OpenEditorFor(); } 仅供参考我正在尝试为visual studio构建模糊文件查找器。 当前文件搜索不太合适,因为您必须具有完全匹配。 我可以处理编写索引器和模糊搜索器,但Visual Studio扩展编写的界面目前有点神秘。

如何使用EnvDTE列出当前解决方案中的所有项目?

我一直在关注MSDN的Hello World指南来开发Visual Studio扩展 (本文专门讨论如何创建一个Visual Studio工具栏命令)。 我试图列出当前/活动解决方案中包含的所有项目。 在Command模板的自动生成代码中。 我曾尝试过EnvDTE的Solution的Projects属性,但它显示零项目。 还有一个ActiveSolutionProjects属性,但它也显示一个空数组。 这是如何实现的? PS:我尝试了DTE和DTE2接口,因为从文档中理解使用哪个版本令人困惑。 我得到DTE2的空服务,所以我要去DTE。 My Solution Explorer看起来像: 更新 :来自gitter / extendvs的 Bert Huijben建议在VSSDK可扩展性示例中找到以下内容 – 但这也不起作用(返回0个元素,在构造函数内和回调函数内): private Hashtable GetLoadedControllableProjectsEnum() { Hashtable mapHierarchies = new Hashtable(); IVsSolution sol = (IVsSolution)this.ServiceProvider.GetService(typeof(SVsSolution)); Guid rguidEnumOnlyThisType = new Guid(); IEnumHierarchies ppenum = null; ErrorHandler.ThrowOnFailure(sol.GetProjectEnum((uint)__VSENUMPROJFLAGS.EPF_LOADEDINSOLUTION, ref rguidEnumOnlyThisType, out ppenum)); IVsHierarchy[] rgelt = new IVsHierarchy[1]; […]

Visual Studio的当前构建操作类型 – Microsoft.VisualStudio.Shell.Interop

在某些扩展中,我们实现了用于使用AdviseUpdateSolutionEvents注册调用者的IVsUpdateSolutionEvents2和IVsSolutionBuildManager2 例如,在任何构建操作开始之前调用此方法: public int UpdateSolution_Begin(ref int pfCancelUpdate) { … } 但是,还需要获取当前构建操作的状态或类型,例如:build / rebuild / clean / deploy 可用和已知的变体: BuildEvents 使用Events.BuildEvents,我可以订阅OnBuildBegin,例如: _buildEvents.OnBuildBegin += new _dispBuildEvents_OnBuildBeginEventHandler((vsBuildScope Scope, vsBuildAction Action) => { buildType = (BuildType)Action; }); 并在任何地方使用buildType,因为vsBuildAction提供了所有必要的信息 但是UpdateSolution_Begin / UpdateSolution_StartUpdate首先作为优先级使用advising方法调用,因此buildType设置太晚了.. 我们也可以使用这个OnBuildBegin而不是UpdateProjectCfg_Begin / UpdateSolution_StartUpdate,但是我们的处理也需要尽快与优先调用者一起使用 IVsUpdateSolutionEvents4 IVsUpdateSolutionEvents4.UpdateSolution_BeginUpdateAction提供dwAction并在解决方案构建期间每个更新操作开始之前触发 – 在第一个UpdateProjectCfg_Begin之前 这正是我需要的! 因为dwAction我可以用VSSOLNBUILDUPDATEFLAGS查看 但是:(它出现在VS2012,我们的扩展支持VS2010和更高……所以也需要2010版本的变种 UpdateProjectCfg_Begin IVsUpdateSolutionEvents2.UpdateProjectCfg_Begin还提供dwAction(参见VSSOLNBUILDUPDATEFLAGS )并可用于2010版本,但它与第一​​个BuildEvents变体相同 – 处理时间太晚(并且不太适合我们的任务) 题 我找不到这方面的文档,但VSSOL可以为VS2010提供VSSOLNBUILDUPDATEFLAGS ,所以我认为应该是将其作为构建操作的当前状态的变体,例如,对于IVsHierarchy等__VSHPROPID和GetProperty […]

创建Visual Studio扩展时如何在“源代码管理历史记录”窗口中获取所选项?

我开发了一个Visual Studio扩展 。 我将一个按钮附加到源控制历史窗口的上下文菜单(菜单上带有’变更集详细信息’,’比较’等等) 我需要从窗口中获取所选的历史记录项目 ,但无法弄清楚如何做到这一点。 更新: 我正在使用团队基础服务器作为源代码控制。 这是我想要访问的窗口的屏幕截图。 截图 我找到了一种方法来检索窗口对象的数据,但我仍然有一些问题: package.FindToolWindow(typeof(/*I don’t know the type of the window*/), 0, false); (包是Microsoft.VisualStudio.Shell.Package类的实例) 源控制历史窗口的类型是什么(屏幕截图中的那个)? 这是我认为的难题的缺失部分。 请帮忙:)谢谢。

自定义测试适配器未在Test Explorer上显示测试

我正在尝试实现自定义测试适配器,所有文件都在下面: TSTestDiscoverer.cs TSTestExecutor.cs TSTestContainer.cs TSTestContainerDiscoverer.cs 来自XMLTestDiscoverer源代码的VsSolutionHelper.cs 运用 vstest.console.exe /listdiscoverers /usevsixextensions:true 我确认扩展已安装,并且已列在测试发现者身上。 运行 vstest.console.exe file.ts 我确认TSTestDiscoverer和TSTestExecutor都正常工作。 现在我想在Test Explorer上列出测试,因为我想我需要ITestContainer和ITestContainerDiscoverer 。 我试图实现这两个,但有些东西不起作用,Test Explorer没有显示任何测试… 我做错了什么? 我怎样才能找出哪些不起作用?