Tag: visual studio extensions

Visual Studio:如何从VS包中获取IDebugEngine2(IVsLoader除外)

是否可以从Visual Studio包中获取IDebugEngine2 ( MSDN )的列表或特定实例,而不使用IVsLoader方法( 此处描述)? 通常我希望大多数服务可以通过GetService直接或通过其他服务获得。 但我不能轻易找到任何可以提供调试引擎的东西。

Visual Studio扩展(VSPackage)在所有实验实例中运行,但在作为.vsix安装后不运行,VS2010除外

我正在编写一个针对VS2010,VS2012和VS2013的Visual Studio扩展。 它运行并在每个实验实例中成功初始化,没有任何问题。 当我安装构建生成的VSIX时,它会安装在所有版本中而没有问题,但只有在VS2010中才能实际执行。 在其他情况下,它从未实例化或初始化。 没有例外被抛出。 使用/ log标志运行非实验实例不会产生任何其他诊断信息(除了确认它已安装,并且具有比库中已有的版本更新的版本。) 我的阅读和经验表明,这是由于某种缺失的assembly或参考,但我无法证实。 我也不知道如何找出遗漏的东西,特别是没有exception或日志消息。 我已经在这里工作了好几天,现在尝试签署我的程序集,各种vsixmanifest更改,更改所需的框架版本,以及此处发现的许多其他没有成果的事情。 此外,我已尝试从VS Gallery安装旧的已发布版本,但它也无法运行。 但是,我收到了几个人的反馈(错误和感谢),所以我知道它适用于某些人。 我没有收到任何反馈说明“没有任何反应”,但不排除这些事件没有报道。 我不打算插件,但目前发布的版本在这里: http : //visualstudiogallery.msdn.microsoft.com/5cc44f63-4ea8-4c17-8aa4-95037a2d32ef 我目前所处位置的整个源可以在分支“ForStackOverflow”的github上找到。 它和master之间的区别是TraceAppender,我用它来确认VSPackage没有被实例化。 https://github.com/alexcpendleton/Pendletron.Vsix.LocateInTFS/tree/ForStackOverflow 任何建议,经验或任何事情都会有所帮助。 谢谢。

Visual Studio SDK – 处理文件添加,删除和重命名事件

我正在开发一个Visual Studio扩展,当用户在当前解决方案中添加,删除或重命名文件时,它应该监听事件。 这个问题的答案指出,VS提供了用于通过DocumentEvents接口监听文档事件(如保存,打开和关闭)的基础结构。 例如: Dte.Events.DocumentEvents.DocumentSaved 是否有类似的事件可以让我听取用户添加/删除/重命名文档?

在多台计算机上进行开发时无法运行VSPackage

我们正在使用Visual Studio 2012和TFS在团队中开发VSPackage。 扩展在用于创建它的计算机上工作正常(通过向导)。 在另一台计算机上,当我们尝试运行它时(使用F5),Visual Studio说“具有类库的输出类型的项目无法直接启动”。 项目的输出确实是类库,在第一台机器上按F5启动Visual Studio的实验实例,扩展已加载并正常工作。 通过在第二台计算机上查看“%LOCALAPPDATA%\ Microsoft \ VisualStudio \ 11.0Exp \ Extensions”,我们看到扩展已经构建,并且尝试向VS注册它。 我们还在第二台计算机上创建了另一个扩展,并尝试在第一台计算机上运行它。 它显示相同的错误。 我们如何才能在不习惯创建它的计算机上运行扩展?

完成保存文件后运行脚本 – Visual Studio可扩展性

有人可以给我一些Visual Studio Extensibility的示例代码,我可以从文档中获取文本,当Save事件结束时,并使用该文本在C#中运行脚本(例如,为某些文件扩展名触发Web服务)。 它也可以是一个新按钮(例如,保存在Web服务中)。

Visual Studio MEF扩展 – 强制边缘字形要更新或重绘

我正在编写的扩展程序起源于演练:创建由Microsoft提供的Margin Glyph示例: https : //msdn.microsoft.com/en-us/library/ee361745.aspx 一切正常,除了我试图触发重绘或更新边缘字形,每当我用来决定绘制字形的数据更改时。 基本上我在工具窗口中有一个按钮,当用户单击按钮时,我想要一个字形出现在边距中。 现在,它不会出现,直到您滚动并返回,或显然关闭并重新加载文档。 我研究过这个,并且看过一些使用IViewTaggerProvider而不是ITaggerProvider的代码示例。 在这些情况下,似乎可以将LayoutChanged事件的处理程序添加到ITagger派生类中,该类还包含GetTags方法。 但是我无法成功将代码从使用ITaggerProvider切换到IViewTaggerProvider,扩展程序在运行时崩溃了。 我不知道这是否会导致解决方案的变化,或者是否是不必要的。 如何强制字形被渲染? 我可以提出某种类型的事件来强制执行GetTags代码吗? 我如何从课外提出这个事件? 例如从工具窗口?

Visual Studio拦截F1帮助命令

我正在寻找一个可视化工作室插件,它可以拦截默认的在线帮助命令,并在类或类型上调用F1帮助时获取MSDN库URL。 例如,假设我将光标放在关键字字符串上并按F1,它通常会自动打开浏览器并导航到字符串引用类型的帮助文档。 我想抓住在浏览器到达浏览器之前传递给浏览器的URL。 是否可以编写一个可以拦截默认F1帮助命令的visual studio插件/扩展? 如果以上可以做任何指针,从哪里开始?

Roslyn Code Action:如何检查预览或实际执行?

我目前正在尝试使用Roslyn和Code Actions,更具体的Code Refactorings。 这感觉很简单,但我有一个难以理解的问题。 代码操作作为“预览”选项针对虚拟工作区执行一次,以便您可以在单击操作并在实际工作区上执行操作之前查看实际更改。 现在我正在处理Roslyn不能真正做的一些事情,所以我正在通过EnvDTE做一些改变。 我知道,这很糟糕,但我找不到另一种方式。 所以这里的问题是: 当我将鼠标hover在我的代码操作上时,代码将作为预览执行,并且它不应该执行EnvDTE更改。 这些只应在真正的执行发生时完成。 我用我的代码的一个小例子创建了一个要点 。 它没有多大意义,但应该展示我想要实现的目标。 通过roslyn做一些修改,然后通过EnvDTE做一些事情,比如改变光标位置。 但当然只有真正的执行。 那些无法点击要点的人的相关部分: public sealed override async Task ComputeRefactoringsAsync(CodeRefactoringContext context) { var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(continueOnCapturedContext: false); var node = root.FindNode(context.Span); var dec = node as MethodDeclarationSyntax; if (dec == null) return; context.RegisterRefactoring(CodeAction.Create(“MyAction”, c => DoMyAction(context.Document, dec, c))); } private static async […]

从Visual Studio文本选择中获取Roslyn SyntaxToken(插入位置)

我试图在Visual Studio扩展包中的VSSDK和Roslyn SDK之间架起桥梁,并且一直很难用。 Visual Studio提供的ActivePoint.AbsoluteCharOffset与使用FindToken(offset)时从Roslyn获取的元素不匹配。 我很确定这与我的当前工作黑客的每一方如何计算EOL字符有关,但我不是100%,我的黑客将长期坚持。 我的黑客是这一行: charOffset += point.Line; 我在char偏移量上添加了行数,这似乎有效,所以我猜我正在添加所有被activepoint计数忽略的换行符。 助手 private VisualStudioWorkspace workspace = null; public RoslynUtilities(VisualStudioWorkspace workspace) { this.workspace = workspace; } public Solution Solution { get { return workspace.CurrentSolution; } } public Document GetDocumentFromPath(string fullPath) { foreach (Project proj in this.Solution.Projects) { foreach (Document doc in proj.Documents) { if (doc.FilePath == […]

Visual Studio解决方案中的项目名称有时为空

在visual studio扩展中,我想获得所有项目及其名称: var service = (DTE) Package.GetGlobalService(typeof (SDTE)); var projects = service.Solution.Projects; foreach (Project project in projects) //…. 除了一个小问题外,这种方法工作得很好而且整洁:项目变量确实返回了确切的项目数。 但是如果项目的全名位于解决方案的文件夹中,则它的全名可能是EMPTY。 (我的意思是项目在解决方案的文件夹中统一时的解决方案结构) 如何正确地获得这些项目?