Visual Studio 解决方案资源管理器中缺少 2022 查看代码按钮

Visual Studio 2022 view code button missing on solution explorer

我正在做一个 WinForms 应用程序(我已经很久没做了)并注意到在 VS 2022 中,“查看代码”按钮(看起来像 <>) 以前位于“解决方案资源管理器”工具栏上的 window 丢失了。我知道我可以右键单击一个表单并通过上下文菜单找到它,或者点击 F7,但是有什么方法可以将它添加回来吗?我似乎找不到任何选项。

可能是一个错误,如其他答案中所述,同时,作为一种解决方法,您可能需要创建一个 VS 扩展,将命令添加到解决方案资源管理器,然后设置 .cs 文件的可见性规则。然后在命令的action中,找到选中的item,用代码编辑器打开。

向解决方案资源管理器添加一个按钮以在代码编辑器中打开 .cs 文件

此扩展程序向“解决方案探索”添加了一个工具栏按钮,仅当您选择 C# 文件时才会显示该按钮,当您单击它时,它会在代码编辑器中打开该文件:

您可以在此处下载或克隆解决方案:

以下是创建此扩展程序的分步指南:

  1. 添加新项目并选择“VSIX 项目”并保留默认名称。
    请注意:要有这个项目类型,你需要在installing/modifying VS安装时安装'Visual Studio扩展开发'。

  2. 添加新项目,然后选择“Extensibility”组下的“Command”。

  3. 打开'VSIXProject1Package.cs'文件,在class:

    中添加下面一行代码
    public const string UIContextGuid = "8B40D5E2-5626-42AE-99EF-3DD1EFF46E7B";
    

    它可以是任何 GUID。

  4. 打开 'VSIXProject1Package.vsct' 文件并添加以下内容作为 <Symbols> 节点的子节点:

    <GuidSymbol name="UIContextGuid" value="{8B40D5E2-5626-42AE-99EF-3DD1EFF46E7B}" />
    

    此处的 GUID 应与上一步中的 GUID 相同。

  5. 修改''class的属性为:

    [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
    [Guid(VSIXProject1Package.PackageGuidString)]
    [ProvideMenuResource("Menus.ctmenu", 1)]
    [ProvideUIContextRule(VSIXProject1Package.UIContextGuid,
    name: "Supported Files",
    expression: "CSharp",
    termNames: new[] { "CSharp" },
    termValues: new[] { "HierSingleSelectionName:.cs$" })]
    public sealed class VSIXProject1Package : AsyncPackage
    
  6. 打开'Command1.cs'修改ServiceProvider属性为:

    private IServiceProvider ServiceProvider
    {
        get
        {
            return this.package;
        }
    }
    
  7. ExecuteCommand 替换为:

    private void Execute(object sender, EventArgs e)
    {
        ThreadHelper.ThrowIfNotOnUIThread();
        var dte =  ServiceProvider.GetService(typeof(DTE)) as DTE; 
        ProjectItem item = dte.SelectedItems.Item(1)?.ProjectItem;
        if (item != null)
        {
            VsShellUtilities.OpenDocumentWithSpecificEditor(package,
                item.FileNames[1],
                Microsoft.VisualStudio.VSConstants
                    .VsEditorFactoryGuid.TextEditor_guid,
                Microsoft.VisualStudio.VSConstants.LOGVIEWID.Code_guid);
        }
    }
    
  8. 添加以下方法:

    private void MyQueryStatus(object sender, EventArgs e)
    {
        ThreadHelper.ThrowIfNotOnUIThread();
        var button = (MenuCommand)sender;
        button.Visible = false;
        var dte = ServiceProvider.GetService(typeof(DTE)) as DTE;
        ProjectItem item = dte.SelectedItems.Item(1)?.ProjectItem;
        if (item != null)
        {
            string fileExtension = 
                Path.GetExtension(item.Name).ToLowerInvariant();
            string[] supportedFiles = new[] { ".cs"};
            button.Visible = supportedFiles.Contains(fileExtension);
        }
    }
    
  9. 打开''文件,用以下内容替换Groups节点的内容:

    <Group guid="guidVSIXProject1PackageCmdSet" 
    id="SolutionToolbarGroup" priority="0xF000">
       <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
    </Group>
    
  10. 将名称为 guidVSIXProject1PackageCmdSetGuidSymbol 的子项替换为以下内容:

    <IDSymbol name="Command1Id" value="0x0100" />
    <IDSymbol name="SolutionToolbarGroup" value="0x0190"/>
    
  11. 添加可见性约束,紧跟在 </Commands> 标签结束之后:

    <VisibilityConstraints>
       <VisibilityItem guid="guidVSIXProject1PackageCmdSet"
       id="Command1Id"
       context="UIContextGuid" />
    </VisibilityConstraints>
    
  12. 修改生成的按钮标签为:

    <Button guid="guidVSIXProject1PackageCmdSet" id="Command1Id" priority="0x0100" type="Button">
       <Parent guid="guidVSIXProject1PackageCmdSet" id="SolutionToolbarGroup" />
       <Icon guid="guidImages" id="bmpPic1" />
       <CommandFlag>DefaultInvisible</CommandFlag>
       <CommandFlag>DynamicVisibility</CommandFlag>
       <Strings>
          <ButtonText>Invoke Command1</ButtonText>
       </Strings>
    </Button>
    
  13. 运行项目,查看结果。

更多信息:

我们可以在包含 .NET Framework winform 项目的解决方案中看到“查看代码”按钮。

如果我们创建一个包含 .NET 6 winform 项目的解决方案,“查看代码”按钮将会消失。我们应该右键单击并通过上下文菜单或按 F7 到达它。

此问题已提交,等待解决。 https://developercommunity.visualstudio.com/t/Solution-Explorers-tool-bar-does-not-in/1528389?space=8&q=vs+2022+Missing+%3C%3E+%22View+Code%22+option+in+Solution+Explorer&stateGroup=active

这远非完美的解决方法。但是:

您可以将按钮添加到您的普通工具栏:

右键单击工具栏区域,'Customize...'、'Commands'、'Toolbar'、select 'Text editor'(或你想要的) , 'Add command...', 'View', 'View code' 和 'Ok'.

现在您的工具栏上有了按钮。

然而,它远非完美,因为您必须在编辑器中打开 Form/Razor 页面,否则该按钮将被禁用。

我不认为 Microsoft 会在解决方案资源管理器中重新添加该按钮 - 毕竟它是故意删除的,但是像我们这样的 'mouse men' 肯定会错过它。