Tag: vsix

自定义扩展程序未显示在实验实例中

我有一个我创建的VSIX扩展,它在Visual Studio 2010中显示并按设计工作。 然而,我正在尝试构建一些依赖于此扩展的Visual Studio自动化,虽然它存在于我正在构建自动化程序包的项目中,但是当我运行包项目时,visual studio实验解决方案没有加载任何问题,但是当我看起来在Extension Manager中我没有看到我的注册扩展(即使它出现在我正在构建扩展的Visual Studio项目中。 该扩展是LightSwitch的一个自定义shell,它可能是一个线索,为什么它没有显示在我的Visual Studio实验实例中,不确定,因为我看到我为LightSwitch显示的其他扩展,并注册了LightSwitch。 当然我的问题是,当我尝试加载一个依赖于我的LightSwitch扩展的解决方案时,否则在实验实例之外加载得很好,因为当我尝试加载时它无法找到我的自定义扩展我实验解决方案中的解决方案。

用DllImport找不到VSIX dll

我有一个VSIX扩展,它依赖于从非托管DLL部署的代码。 我已经将VSIX包含在DLL中了,我用zip程序破解了VSIX以确认它已正确部署。 但是,当我使用DllImport属性时,.NET Framework声称它无法找到它。 如何从我的VSIX中打包的DLL导入函数?

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 + ” […]

DialogPage – 字符串数组未保留

我正在开发视觉工作室的扩展。 我有一个选项页面: public class GeneralOptionsPage : DialogPage { [Category(“General”)] [DisplayName(“Foos”)] [Description(“Bla Foo Bla”)] public string[] Foos { get; set; } [Category(“General”)] [DisplayName(“Bar”)] [Description(“Bar Foo Bar”)] public string Bar { get; set; } } Bar酒店的工作非常完美并且坚持不懈。 Foos属性也可以工作(它甚至可以在选项页面中为你提供一个很好的弹出窗口,你可以在每行输入一个字符串),这意味着我可以设置它并在我的扩展中使用它,但它不会写入注册表/存储。 当我关闭VS并再次打开它时,它总是空着的。 从MSDN引用: DialogPage的默认实现支持具有适当转换器的属性,或者是可以扩展为具有适当转换器的属性的结构或数组的属性。 有关转换器列表,请参阅System.ComponentModel命名空间。 Visual Studio Extensibility Samples管理int,string和System.Drawing.Size属性。 据我所知,我正在使用System.ComponentModel命名空间中的有效组件。 那么我做错了什么? 我是否必须以不同的方式处理数组?

即使Roslyn Diagnostic Analyzer出现了一些错误,编译仍然成功

DiagnosticAnalyzer是一个基于Roslyn的自定义扩展,其DiagnosticDescriptor与DiagnosticSeverity.Error如下所示 internal static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Description, MessageFormat, Category, DiagnosticSeverity.Error); 当使用扩展时,它确实显示了针对诊断分析器自定义规则的代码的红色波形,强调它是一个错误 ,它甚至显示在Visual Studio的错误列表窗口中。 但是在编译时 ,此代码在Visual Studio的输出窗口中获取编译成功消息。 这违背了将错误强调为诊断分析器严重性的整个概念。 如果这是Roslyn的默认工作方式,那么我们是否有办法停止编译 。 我正在使用: Visual Studio 2013 Update 3 Roslyn最终用户Preview.vsix 包含使用Roslyn SDK Project Templates.vsix制作的DiagnosticAnalyzer的VSIX扩展

如何使用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]; […]

如何使用Roslyn代码修复提供程序API从Document中删除SyntaxNode列表?

我正在使用SyntaxFactory.VariableDeclaration定制生成的变量声明,并根据某些条件收集了一个SyntaxNode列表。 我做了以下事情: 修改节点 var newRoot = root.ReplaceNode(expression, newVariableDeclaration) 这使用newVariableDeclaration成功修改了节点。 在循环中,删除与列表中存在的节点对应的节点 foreach (var listObject in listObjects) { newRoot = newRoot.RemoveNode(listObject, SyntaxRemoveOptions.KeepNoTrivia); } 这不会更改listObject需要更改的所有listObject保持不变。 如果我们使用root.RemoveNode(listObject, SyntaxRemoveOptions.KeepNoTrivia)它显然将继续替换先前的更改。 所以这里newVariableDeclaration是整个文档中唯一被更改的节点,这是因为SyntaxNodes SyntaxNode与我从root获取的SyntaxNode更改。 如果我做错了,请纠正我。 编辑:我查看了CSharpSyntaxRewriter但似乎它每次访问节点时都在分析单个节点,并且一次只能修改一个节点。 在我的场景中,我将不得不访问特定节点,对其进行更改,并删除与访问节点所做更改相关的其他节点。

对Visual Studio 2012 VSIX扩展进行数字签名

我正在尝试签署一个打包为VSIX文件的Visual Studio 2012 extension 。 我已按照http://www.jeff.wilcox.name/2010/03/vsixcodesigning/上的说明进行操作; 但是,我有兴趣在不指定pfx文件和密码的情况下执行签名。 例如,如果我要调用’signtool.exe’,我的命令行将是: “signtool.exe” sign /n MySubjectName /t ‘http://timestamp.verisign.com/scripts/timstamp.dll’ /d “MyDescription” MyPackage.vsix 我知道这个命令不适用于VSIX文件,尽管它适用于MSI存档。 使用此命令,调用signtool时无需指定密码或pfx文件。 使用指定的主题MySubjectName选择已安装的最佳证书。 按照Jeff博客上的代码,签名步骤要求定义pfx文件名和密码以创建签名中使用的X509Certificate2 : private static void SignAllParts(Package package, string pfx, string password, string timestamp){ var signatureManager = new PackageDigitalSignatureManager(package); signatureManager.CertificateOption = CertificateEmbeddingOption.InSignaturePart; /*…*/ signatureManager.Sign(toSign, new System.Security.Cryptography.X509Certificates.X509Certificate2(pfx, password)); } 是否有任何涉及PackageDigitalSignatureManager API可能让我找到基于MySubjectName的X509Certificate ,以便我可以签名?

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 2010的HWnd

有没有办法从VSIX扩展中获取到Visual Studio 2010顶部窗口的HWnd指针? (我想改变窗口的标题)。