您好,我想在VS 2010中编写插件.在哪里可以从解决方案资源管理器中选择文件,获取文件属性并显示我在插件项目中创建的对话框或表单?
VS 2010有任何体面的待办事项列表扩展吗?我喜欢使用ReSharper待办事项和评论正则表达式,但对于一些提醒/任务等我不想在代码中添加注释,特别是如果任务是一般的而不是特定于任何一段代码.尽管如此,VS 2010任务列表对于其他任务来说非常原始且笨重.
visual-studio-addins visual-studio-2010 visual-studio visual-studio-extensions
在Visual Studio扩展中,我想获取所有项目及其名称:
var service = (DTE) Package.GetGlobalService(typeof (SDTE));
var projects = service.Solution.Projects;
foreach (Project project in projects)
//....
Run Code Online (Sandbox Code Playgroud)
除了一个小问题外,这种方法很好用,很整洁:项目变量实际上返回了确切的项目数。但是,如果项目的全名位于解决方案的文件夹中,则可能为EMPTY。(我的意思是当项目合并在解决方案的文件夹中时解决方案的结构)
如何正确地获得这些项目?
我需要从任何现有的包装类生成自定义类型的包装类。现有的 C# 应用程序在这方面做得很好,但它的使用很烦人,因为它涉及使用正确的文件路径打开应用程序,将生成的文件移动到目标位置,修改命名空间并将其添加到 Visual Studio 解决方案。
我知道可能还有其他解决方案,但我决定要扩展来做到这一点(也是出于教育目的)。目标 IDE 是 Visual Studio 2017,它不需要向后兼容。
为了可用性,最好在关注类名时以某种方式扩展快速操作菜单。应该有可能做到这一点,但我没有找到任何资源。
.net c# visual-studio visual-studio-extensions visual-studio-2017
我正在为Visual Studio 2017编写扩展,扩展可以在项目的上下文菜单中使用(通过右键单击等)
IDM_VS_CTXT_PROJNODE
Run Code Online (Sandbox Code Playgroud)
我的问题是当我进入
private void MenuItemCallback(object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)
我如何获得项目路径?
我想编写一个 VSIX LSP 扩展。我希望它以最简单的方式工作 - 这似乎是使用“打开文件夹”功能来打开代码文件夹,然后做我的事情。
要启动 LSP 服务器,我需要知道打开的文件夹的目录。我如何知道 Visual Studio 是否处于“打开文件夹”模式(如果不是,则不应启动 LSP),以及如何知道该文件夹的路径(以便我可以启动 LSP 服务器)?
我发现https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.shell.interop.ivssolutionevents7?view=visualstudiosdk-2017这似乎很有希望,因为我可以在某些特定文件夹出现时进行注册打开 - 告诉我已使用“打开文件夹”功能的事件可能是完美的 - 如果打开文件夹,则启动该文件夹的 LSP。
vs-extensibility vsix visual-studio-extensions language-server-protocol
我想创建一个 VisualStudio 扩展,将命令添加到“调试”菜单。该模板包含以下行:
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
Run Code Online (Sandbox Code Playgroud)
它将按钮添加到工具菜单中。遗憾的是,我不知道如何更改该行,以便该按钮出现在“调试”菜单中。
根据此网站https://msdn.microsoft.com/en-us/library/cc826118.aspx,没有调试菜单之类的东西:-/
我不使用 VSIX 进行集成(支持旧的 VS 和 SSMS)。安装程序将所有 dll 放入“程序文件”并将 pkgdef 和清单放入特定文件夹。目前 VS2019 显示我的扩展使用“已弃用的 API”的消息。
带有来自 docs.microsoft.com 的消息的图像,但它是相同的。
我完成了以下步骤:
我的包看起来如此(构造函数现在是空的)
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[InstalledProductRegistration("#110", "#112", "7.1.7", IconResourceID = 115)]
[ProvideMenuResource("MyMenus.ctmenu", 1)]
[ProvideAutoLoad(GuidList.ShellInitialized, PackageAutoLoadFlags.BackgroundLoad)]
[ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string, PackageAutoLoadFlags.BackgroundLoad)]
[System.Runtime.InteropServices.Guid(GuidList.guidMyPkgString)]
public sealed class MyPackage : AsyncPackage {
Run Code Online (Sandbox Code Playgroud)
但是 VisualStudio 一次又一次地显示有关已弃用 API 的消息。我错过了什么?VS 在包加载期间检查什么?
编辑:我创建了 AsyncPackage,添加了属性,将集成文件更新到 VsixV3。为什么VS同步加载扩展?
自 2013 版本以来,我一直在 Visual Studio 中使用我非常喜欢的扩展。该扩展不是由其创建者维护的,但他在 GitHub 上发布了源代码。对于 Visual Studio 的每个新版本,我都会尽力更新扩展,以便它仍然可以工作(我对扩展没有其他经验)。
不幸的是,在 Visual Studio 2019 中,Microsoft 弃用了此扩展严重依赖的库之一(工作项跟踪)。我一直在尝试遵循他们的迁移指南,但它只有几个我可以使用的代码示例(主要涉及查询)。大多数需要转换的代码超出了我的理解范围(例如:WorkItemStore 或 WorkItemCollection)。
我已经能够成功构建/编译项目,但由于上述原因,它有许多关于过时项目的警告(“QueryItem”已过时。有关更多信息,请参阅http://aka.ms/witclientom上的文档)。但是,没有构建错误,我可以安装扩展。
安装后,可以通过扩展 - 管理扩展页面查看(和卸载)扩展,并且可以在帮助 - 关于屏幕中查看有关扩展的信息。但是,扩展应该向“工具”菜单添加两个项目 - 但大多数情况下,它不会。我以某种方式设法让这些项目显示了几次,但在尝试访问它们时会出现异常(通过 Visual Studio 的实验实例或常规实例)。当我停止调试以修复错误,然后卸载、构建并重新安装扩展时,“工具”菜单项再次丢失。我不知道如何找回它们,也不明白如何找出它们丢失的原因 - 可能是由于错误,但调试/实验实例在这里没有帮助,因为它不会中断或显示任何错误。
是否有其他方法可以了解“工具”菜单项未显示的原因?
更新:这是我的扩展的 .vsct 文件的内容。我检查了一下,似乎每个项目都有自己唯一的 ID。
<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This is the file that defines the actual layout and type of the commands.
It is divided in different sections (e.g. command definition, command
placement, ...), with each defining a …Run Code Online (Sandbox Code Playgroud) 我为 VS2019 创建了一个自定义模板,其中包含两个项目。下面是我的 root.vstemplate 文件
<VSTemplate Version="3.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>Asp.Net Core Template EF Core</Name>
<Description>Asp.Net Core 3.1 Boilerplate template</Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>Asp.Net Core Template EF Core</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>logo.png</Icon>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="AspNet Core Ef Core">
src\AspNetCore3EfCoreTemplate\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="AspNet Core Ef Core Web">
src\AspNetCore3EfCoreTemplate.Web\MyTemplate.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
</VSTemplate>
Run Code Online (Sandbox Code Playgroud)
我按照此链接的说明进行操作,但是当我尝试在 VS2019 中创建新项目时未显示我的模板。有谁知道为什么会这样?
visual-studio visual-studio-extensions .net-core visual-studio-2019
我想创建自己的具有全球知名度的服务。为了实现这一点,我遵循了这个示例解决方案。
一切顺利,我可以在一个类中调用我的服务,该类扩展自 Package 抽象类,如下所示:
public class ClientPackage : Package
{
private void GetGlobalServiceCallback(object sender, EventArgs args)
{
IMyGlobalService service = GetService(typeof(SMyGlobalService)) as IMyGlobalService;
}
}
Run Code Online (Sandbox Code Playgroud)
因为我在一个包中,所以我可以轻松调用 GetService 并且可以获得我的服务。但是,如果我想从一个不扩展 Package 抽象类的类获取服务,该怎么办?
例如,我有一个类,它实现了 ITagger 接口。如果我想获取此类中的服务,我必须以这种方式使用 Package.GetGlobalService() 方法:
var txtMgr = (IVsTextManager)Package.GetGlobalService(typeof(SVsTextManager));
Run Code Online (Sandbox Code Playgroud)
我尝试使用 Package.GetGlobalServie() 获取自己的服务,但总是得到 null。链接的示例代码不包含我的问题的解决方案。
我可能错过了什么或者我在获得服务时遇到了错误的情况吗?
编辑:
好吧,假设我必须使用 MEF 来获取我的服务,因为我无法使用 Package.GetGlobalService() 获取我的服务。
我有一个包含 2 个项目的解决方案。一种是类库,其中包含这样的接口:
public interface INamesAccessor
{
IEnumerable<string> GetNames();
}
Run Code Online (Sandbox Code Playgroud)
另一个项目是 VSPackage(与第一个项目有参考),它也实现了我的接口:
[Export(typeof(INamesAccessor))]
public sealed class BitbucketExtensionPackage : Package, INamesAccessor
{
private IEnumerable<string> _names { get; set; } …Run Code Online (Sandbox Code Playgroud) 我想实现一个 Visual Studio 2015 扩展来获取用户在代码编辑器中选择的文本。比我想操纵选定的文本。
在代码编辑器中通过上下文菜单有一个按钮/命令。但我不知道如何获取选定的文本。
我认为,这个解决方案在这里已经过时或者我missunderstand解决方案。
c# visual-studio visual-studio-extensions visual-studio-2015