【问题标题】:Can I hide the smiley in Visual Studio 2015 final?我可以在 Visual Studio 2015 final 中隐藏笑脸吗?
【发布时间】:2015-07-21 06:57:55
【问题描述】:

在 Visual Studio 2015 RC 中,主窗口右上角有反馈笑脸。

不幸的是,它仍然存在于 Visual Studio 2015 的最终版本中:

我搜索了所有选项和设置,发现无法隐藏这个笑脸。

我的问题:

任何选项或其他(注册表等)破解来删除笑脸?

2015 年 12 月 1 日更新:

昨天Update 1 for Visual Studio was released

虽然我仍然找不到隐藏笑脸的选项,但他们至少为它提供了一个不那么分散注意力的图标:

【问题讨论】:

  • 我认为你应该给他们一个皱眉。您是尝试全新安装还是通过 RC 升级?可能由于剩余设置而出现笑脸,或者您可能不得不从笑脸的设置中拒绝参与改进计划
  • 这是一个重大错误,显然它会阻止最终发布至少 10 个月
  • 也许这有助于aidanjryan.com/blog/2013/07/01/…。但它适用于 VS 2013
  • 我只是给他们发了一个关于无法隐藏它的皱眉(或者至少让它是一种与深色主题对比较少的颜色)。希望他们会得到大量的这些并在某个阶段进行更改。
  • @flintza 我每天都会皱眉头。

标签: visual-studio visual-studio-2015


【解决方案1】:

编辑:

Visual Studio 2015 Update 1 将反馈图标更改为低调的黑白图标,这样就没有笑脸了!发行说明中未提及。

原答案:

在 OPs 回答中,此图标在此注册表项中指定:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}

如果您删除该键,Visual Studio 会重新创建它,但如果您使注册表键的“Package”值无效并重新启动 Visual Studio,那么笑脸图标就会消失:

但是,当您安装 Visual Studio 更新(例如 SSDT、Resharper)时,安装程​​序会恢复包值,并且笑脸又回来了。所以我创建了一个这样的注册表文件,以便在笑脸重新出现时运行:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}]
@="Feedback Button"
"Package"="{00000000-AA51-43B1-97EE-509A33B681F3}"
"DisplayName"="#1001"
"ViewFactory"="{060EAB95-139E-407D-BEDC-CC2B7A9B39D4}"
"ViewId"=dword:00000064
"Alignment"="TitleBarRight"
"Sort"=dword:00000064
"FullScreenAlignment"="MenuBarRight"
"FullScreenSort"=dword:00000064

这似乎不影响启动时间或稳定性,但不能保证,注册表更改是糟糕的 mmm 等。

【讨论】:

  • 同样如此,Smiley 又回来了。也许从注册表项中删除所有权限可能会有所帮助?
  • 是的,我今天更新了 Resharper,它又回来了。我不确定删除权限是否有效,我之前尝试过,当 Visual Studio 检测到它无法写入该密钥时,它生成了一个新的(临时?)版本的 14.0_Config 供使用。
  • 似乎整个 Visual Studio 的大部分开发时间都专门用于笑脸功能。感谢奥巴马,感谢微软!
【解决方案2】:

感谢Jehof's hint Visual Studio 2013,我能够解决这个问题:

删除以下注册表项确实有帮助。

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}

(请注意链接博客文章中的 14.0 而不是 12.0)

重新启动 Visual Studio 后,反馈按钮现在消失了。

一天后更新

突然反馈图标又出现了。注册表项也在这里。

这到底是怎么回事?

似乎笑脸从坟墓中复活了。我现在真的很害怕……

【讨论】:

  • 这行得通,希望它能坚持下去。不要让讽刺的 cmets 让你气馁。考虑到在这么短的时间内投票的数量,我敢打赌很多人都会默默地欣赏这个提示。
  • 尝试使用 ProcessMonitor 查看哪个应用程序创建了注册表项
  • 我也有同样的问题,当使用深色方案时,这个幼稚的图标会像拇指一样突出。所以我已经为每个人删除了对整个键 (MainWindowFrameControls) 的写访问权限,让我们看看是否可以永久修复它。
  • @stuartd 你刷新了注册表编辑器的视图吗?
  • @UweKeim 当 Visual Studio 检测到它无法写入该密钥时,它生成了一个新的(临时?)版本 14.0_Config 并且密钥已在密钥的新“分支”中重新创建VS用的是哪个,所以看不到。
【解决方案3】:

按照此线程中的建议,我还修改了注册表项,它起初可以工作,但 VS2015 会在一段时间后继续将密钥重新创建为其原始值。

为了解决这个问题,我在任务栏中添加了一个 VS2015 快捷方式,然后 Shift+右键单击以访问“属性”。将指向 devenv.exe 的快捷方式的 Target 路径替换为自己的本地 c:\tools\vs.bat 文件。

此外,我在快捷方式属性中将运行更改为“最小化”。 vs.bat 如下所示:

@echo off
reg ADD HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07} /v Package /t REG_SZ /d {00000000-AA51-43B1-97EE-509A33B681F3} /f 2> nul
start /B devenv.exe

这确保了每次我通过任务栏快捷方式启动 VS2015 时都会覆盖密钥。我发现这对我来说是可靠的。

如果你在没有这个的情况下启动 VS(例如,在 VS 重启时),你可能需要运行上述两次。

【讨论】:

  • 好主意 :-) 我也试试。
  • 现在,如果我可以在 Visual Studio 2015 和 Windows 10 中禁用/卸载/还原所有其他令人难以置信的愚蠢和烦人的(空中引号)功能(结束空中引号),我会是一个 非常快乐的露营者......
【解决方案4】:

我已经删除了 Alignment 键的值(只是将其留空)。该图标已经消失到现在,但我还没有安装任何更新。会继续发帖。

更新 恢复 VS2015 不仅恢复了这个按钮,而且改变了它的配置方式:现在我的方法不起作用。此外,删除注册表项不再有帮助。通过这个有用的工具写给 MS。

【讨论】:

    【解决方案5】:

    Visual Commander extension 允许创建可以挂钩事件的扩展。提供的一个示例是hiding the feedback icon

    // References: System.Xaml 
    public class E : VisualCommanderExt.IExtension
    {
        public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
        {
            timer = new System.Windows.Threading.DispatcherTimer();
            timer.Interval = System.TimeSpan.FromMilliseconds(1000);
            timer.Tick += OnTimer;
            timer.Start();
        }
        public void Close()
        {
            timer.Stop();
        }
        private void OnTimer(System.Object o, System.EventArgs a)
        {
            try
            {
                if (HideSignIn() && HideFeedback())
                    ;
            }
            catch (System.Exception e)
            {
            }
        }
        private bool HideSignIn()
        {
            System.Windows.FrameworkElement e = 
                FindElement(System.Windows.Application.Current.MainWindow, 
                    "PART_MenuBarFrameControlContainer");
            if (e != null)
            {
                e.Visibility = System.Windows.Visibility.Collapsed;
                return true;
            }
            return false;
        }
        private bool HideFeedback()
        {   
            System.Windows.FrameworkElement e = 
                FindElement(System.Windows.Application.Current.MainWindow, 
                    "PART_TitleBarFrameControlContainer");
            if (e != null)
            {
                System.Windows.DependencyObject o1 = 
                    System.Windows.Media.VisualTreeHelper.GetChild(e, 0);
                System.Windows.DependencyObject o2 = 
                    System.Windows.Media.VisualTreeHelper.GetChild(o1, 0);
                System.Windows.DependencyObject o3 = 
                    System.Windows.Media.VisualTreeHelper.GetChild(o2, 0);
                if (System.Windows.Media.VisualTreeHelper.GetChildrenCount(o3) == 3)
                {
                    System.Windows.DependencyObject o4 = 
                        System.Windows.Media.VisualTreeHelper.GetChild(o3, 1);
                    (o4 as System.Windows.FrameworkElement).Visibility = 
                        System.Windows.Visibility.Collapsed;
                    return true;
                }
            }
            return false;
        }
        private System.Windows.FrameworkElement FindElement(System.Windows.Media.Visual v, string name)
        {
            if (v == null)
                return null;
            for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(v); ++i)
            {
                System.Windows.Media.Visual child = 
                    System.Windows.Media.VisualTreeHelper.GetChild(v, i) as
                        System.Windows.Media.Visual;
                if (child != null)
                {
                    System.Windows.FrameworkElement e = 
                        child as System.Windows.FrameworkElement;
                    if (e != null && e.Name == name)
                        return e;
                }
                System.Windows.FrameworkElement result = FindElement(child, name);
                if (result != null)
                    return result;
            }
            return null;
        }
        private System.Windows.Threading.DispatcherTimer timer;
    }
    

    尽管将此示例与hide publish button 示例进行比较,似乎OnTimer 函数应该在图标被隐藏后停止计时器。

    private void OnTimer(System.Object o, System.EventArgs a)
    {
        try
        {
            if (HideSignIn() && HideFeedback())
                timer.Stop();
    
        }
        catch (System.Exception e)
        {
        }
    }
    

    【讨论】:

    • 真的需要那些默默吃异常的 catch 块吗?
    • 我不知道。我今天才开始使用扩展并将它们留在里面。如果发生异常,我不知道它会如何影响 VS。我想人们可以删除它们并故意抛出异常以找出发生了什么。如果没有任何不良影响,那么也许他们可以安全地排除在外。
    【解决方案6】:

    这行 PowerShell 会删除图标,直到安装更新:

     Set-ItemProperty -Path "HKCU:\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}" Package "{00000000-AA51-43B1-97EE-509A33B681F3}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多