Visual Studio 解决方案资源管理器中缺少 2022 查看代码按钮
Visual Studio 2022 view code button missing on solution explorer
我正在做一个 WinForms 应用程序(我已经很久没做了)并注意到在 VS 2022 中,“查看代码”按钮(看起来像 <>) 以前位于“解决方案资源管理器”工具栏上的 window 丢失了。我知道我可以右键单击一个表单并通过上下文菜单找到它,或者点击 F7,但是有什么方法可以将它添加回来吗?我似乎找不到任何选项。
可能是一个错误,如其他答案中所述,同时,作为一种解决方法,您可能需要创建一个 VS 扩展,将命令添加到解决方案资源管理器,然后设置 .cs 文件的可见性规则。然后在命令的action中,找到选中的item,用代码编辑器打开。
向解决方案资源管理器添加一个按钮以在代码编辑器中打开 .cs 文件
此扩展程序向“解决方案探索”添加了一个工具栏按钮,仅当您选择 C# 文件时才会显示该按钮,当您单击它时,它会在代码编辑器中打开该文件:
您可以在此处下载或克隆解决方案:
以下是创建此扩展程序的分步指南:
添加新项目并选择“VSIX 项目”并保留默认名称。
请注意:要有这个项目类型,你需要在installing/modifying VS安装时安装'Visual Studio扩展开发'。
添加新项目,然后选择“Extensibility”组下的“Command”。
打开'VSIXProject1Package.cs'文件,在class:
中添加下面一行代码
public const string UIContextGuid = "8B40D5E2-5626-42AE-99EF-3DD1EFF46E7B";
它可以是任何 GUID。
打开 'VSIXProject1Package.vsct' 文件并添加以下内容作为 <Symbols>
节点的子节点:
<GuidSymbol name="UIContextGuid" value="{8B40D5E2-5626-42AE-99EF-3DD1EFF46E7B}" />
此处的 GUID 应与上一步中的 GUID 相同。
修改''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
打开'Command1.cs'修改ServiceProvider
属性为:
private IServiceProvider ServiceProvider
{
get
{
return this.package;
}
}
将 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);
}
}
添加以下方法:
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);
}
}
打开''文件,用以下内容替换Groups
节点的内容:
<Group guid="guidVSIXProject1PackageCmdSet"
id="SolutionToolbarGroup" priority="0xF000">
<Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
</Group>
将名称为 guidVSIXProject1PackageCmdSet
的 GuidSymbol
的子项替换为以下内容:
<IDSymbol name="Command1Id" value="0x0100" />
<IDSymbol name="SolutionToolbarGroup" value="0x0190"/>
添加可见性约束,紧跟在 </Commands>
标签结束之后:
<VisibilityConstraints>
<VisibilityItem guid="guidVSIXProject1PackageCmdSet"
id="Command1Id"
context="UIContextGuid" />
</VisibilityConstraints>
修改生成的按钮标签为:
<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>
运行项目,查看结果。
更多信息:
我们可以在包含 .NET Framework winform 项目的解决方案中看到“查看代码”按钮。
如果我们创建一个包含 .NET 6 winform 项目的解决方案,“查看代码”按钮将会消失。我们应该右键单击并通过上下文菜单或按 F7 到达它。
这远非完美的解决方法。但是:
您可以将按钮添加到您的普通工具栏:
右键单击工具栏区域,'Customize...'、'Commands'、'Toolbar'、select 'Text editor'(或你想要的) , 'Add command...', 'View', 'View code' 和 'Ok'.
现在您的工具栏上有了按钮。
然而,它远非完美,因为您必须在编辑器中打开 Form/Razor 页面,否则该按钮将被禁用。
我不认为 Microsoft 会在解决方案资源管理器中重新添加该按钮 - 毕竟它是故意删除的,但是像我们这样的 'mouse men' 肯定会错过它。
我正在做一个 WinForms 应用程序(我已经很久没做了)并注意到在 VS 2022 中,“查看代码”按钮(看起来像 <>) 以前位于“解决方案资源管理器”工具栏上的 window 丢失了。我知道我可以右键单击一个表单并通过上下文菜单找到它,或者点击 F7,但是有什么方法可以将它添加回来吗?我似乎找不到任何选项。
可能是一个错误,如其他答案中所述,同时,作为一种解决方法,您可能需要创建一个 VS 扩展,将命令添加到解决方案资源管理器,然后设置 .cs 文件的可见性规则。然后在命令的action中,找到选中的item,用代码编辑器打开。
向解决方案资源管理器添加一个按钮以在代码编辑器中打开 .cs 文件
此扩展程序向“解决方案探索”添加了一个工具栏按钮,仅当您选择 C# 文件时才会显示该按钮,当您单击它时,它会在代码编辑器中打开该文件:
您可以在此处下载或克隆解决方案:
以下是创建此扩展程序的分步指南:
添加新项目并选择“VSIX 项目”并保留默认名称。
请注意:要有这个项目类型,你需要在installing/modifying VS安装时安装'Visual Studio扩展开发'。添加新项目,然后选择“Extensibility”组下的“Command”。
打开'VSIXProject1Package.cs'文件,在class:
中添加下面一行代码public const string UIContextGuid = "8B40D5E2-5626-42AE-99EF-3DD1EFF46E7B";
它可以是任何 GUID。
打开 'VSIXProject1Package.vsct' 文件并添加以下内容作为
<Symbols>
节点的子节点:<GuidSymbol name="UIContextGuid" value="{8B40D5E2-5626-42AE-99EF-3DD1EFF46E7B}" />
此处的 GUID 应与上一步中的 GUID 相同。
修改''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
打开'Command1.cs'修改
ServiceProvider
属性为:private IServiceProvider ServiceProvider { get { return this.package; } }
将
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); } }
添加以下方法:
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); } }
打开''文件,用以下内容替换
Groups
节点的内容:<Group guid="guidVSIXProject1PackageCmdSet" id="SolutionToolbarGroup" priority="0xF000"> <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/> </Group>
将名称为
guidVSIXProject1PackageCmdSet
的GuidSymbol
的子项替换为以下内容:<IDSymbol name="Command1Id" value="0x0100" /> <IDSymbol name="SolutionToolbarGroup" value="0x0190"/>
添加可见性约束,紧跟在
</Commands>
标签结束之后:<VisibilityConstraints> <VisibilityItem guid="guidVSIXProject1PackageCmdSet" id="Command1Id" context="UIContextGuid" /> </VisibilityConstraints>
修改生成的按钮标签为:
<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>
运行项目,查看结果。
更多信息:
我们可以在包含 .NET Framework winform 项目的解决方案中看到“查看代码”按钮。
如果我们创建一个包含 .NET 6 winform 项目的解决方案,“查看代码”按钮将会消失。我们应该右键单击并通过上下文菜单或按 F7 到达它。
这远非完美的解决方法。但是:
您可以将按钮添加到您的普通工具栏:
右键单击工具栏区域,'Customize...'、'Commands'、'Toolbar'、select 'Text editor'(或你想要的) , 'Add command...', 'View', 'View code' 和 'Ok'.
现在您的工具栏上有了按钮。
然而,它远非完美,因为您必须在编辑器中打开 Form/Razor 页面,否则该按钮将被禁用。
我不认为 Microsoft 会在解决方案资源管理器中重新添加该按钮 - 毕竟它是故意删除的,但是像我们这样的 'mouse men' 肯定会错过它。