Visual studio 在Visual Studio IDE中显示解决方案/文件路径

Visual studio 在Visual Studio IDE中显示解决方案/文件路径,visual-studio,projects-and-solutions,Visual Studio,Projects And Solutions,我经常使用Visual Studio的多个实例,经常使用同一解决方案的不同分支 用于在标题栏中显示当前源文件的完整路径,但VisualStudio 2005似乎没有这样做。这使得计算出我当前正在查看的解决方案的哪个分支稍微有点尴尬(我知道的最快的方法是将鼠标悬停在选项卡上,以便获得源文件的路径作为工具提示) 是否有办法将完整的解决方案或文件路径放入标题栏,或者至少放在始终可见的位置,以便我可以快速判断哪个分支加载到每个实例中?没有本机方法,但可以通过宏实现。详情如下: 您只需向Evironmen

我经常使用Visual Studio的多个实例,经常使用同一解决方案的不同分支

用于在标题栏中显示当前源文件的完整路径,但VisualStudio 2005似乎没有这样做。这使得计算出我当前正在查看的解决方案的哪个分支稍微有点尴尬(我知道的最快的方法是将鼠标悬停在选项卡上,以便获得源文件的路径作为工具提示)


是否有办法将完整的解决方案或文件路径放入标题栏,或者至少放在始终可见的位置,以便我可以快速判断哪个分支加载到每个实例中?

没有本机方法,但可以通过宏实现。详情如下:

您只需向EvironmentEvents宏部分添加一点visualbasic宏,然后重新启动visualstudio


注意:当您第一次加载Visual Studio时,该路径不会显示,但当您更改正在查看的文件时,该路径就会显示。可能有一种方法可以解决这个问题,但似乎没什么大不了的。

相关说明:对于Visual Studio 2005,您也可以使用命令菜单文件→ 高级保存选项。该对话框显示当前文件的完整路径,您可以复制文本。

这确实很尴尬。在选项卡上悬停确实是为数不多的有用的事情之一


备选方案:右键单击文件选项卡:。看来我们必须这样做。

查看最新版本的。它引入了一个名为Friendly Solution Name的功能,您可以将其设置为在Visual Studio的主窗口标题中显示解决方案文件路径(或其任何部分)


更多详细信息:对于VisualStudio2008,根据接受的答案编写宏的更好方法是使用解决方案事件而不是文档事件-这使您可以始终编辑标题栏,即使您没有选择文档

这是我的同事和我在另一个宏的基础上组合起来的宏-您需要更改第15-18行,以便从源目录中提取分支名称,不管您是如何设置的

Private timer As System.Threading.Timer

Declare Auto Function SetWindowText Lib "user32" (ByVal hWnd As System.IntPtr, ByVal lpstring As String) As Boolean

Private _branchName As String = String.Empty

Private Sub SolutionEvents_Opened() Handles SolutionEvents.Opened
    Try
        If timer Is Nothing Then
            ' Create timer which refreshes the caption because
            ' IDE resets the caption very often
            Dim autoEvent As New System.Threading.AutoResetEvent(False)
            Dim timerDelegate As System.Threading.TimerCallback = _
                AddressOf tick
            timer = New System.Threading.Timer(timerDelegate, autoEvent, 0, 25)
        End If
        Dim sourceIndex As Integer = DTE.Solution.FullName.IndexOf("\Source")
        Dim shortTitle As String = DTE.Solution.FullName.Substring(0, sourceIndex)
        Dim lastIndex As Integer = shortTitle.LastIndexOf("\")
        _branchName = shortTitle.Substring(lastIndex + 1)
        showTitle(_branchName)
    Catch ex As Exception

    End Try
End Sub


Private Sub SolutionEvents_BeforeClosing() Handles SolutionEvents.BeforeClosing
    If Not timer Is Nothing Then
        timer.Dispose()
    End If
End Sub


''' <summary>Dispose the timer on IDE shutdown.</summary>
Public Sub DTEEvents_OnBeginShutdown() Handles DTEEvents.OnBeginShutdown
    If Not timer Is Nothing Then
        timer.Dispose()
    End If
End Sub


'''<summary>Called by timer.</summary>
Public Sub tick(ByVal state As Object)
    Try
        showTitle(_branchName)
    Catch ex As System.Exception
    End Try
End Sub


'''<summary>Shows the title in main window.</summary>
Private Sub showTitle(ByVal title As String)
    SetWindowText(New System.IntPtr(DTE.MainWindow.HWnd), title & " - " & DTE.Name)
End Sub
专用计时器作为System.Threading.timer
将自动函数SetWindowText Lib“user32”(ByVal hWnd作为System.IntPtr,ByVal lpstring作为String)声明为布尔值
Private _branchnameas String=String.Empty
私有子SolutionEvents_Opened()处理SolutionEvents.Opened
尝试
如果计时器是空的,那么
'创建刷新标题的计时器,因为
'IDE经常重置标题
Dim autoEvent作为新的System.Threading.AutoResetEvent(错误)
Dim timerDelegate As System.Threading.TimerCallback=_
滴答声地址
计时器=新系统.Threading.timer(timerDelegate,autoEvent,0,25)
如果结束
Dim sourceIndex As Integer=DTE.Solution.FullName.IndexOf(“\Source”)
Dim shortTitle作为String=DTE.Solution.FullName.Substring(0,sourceIndex)
Dim lastIndex为整数=shortTitle.LastIndexOf(“\”)
_branchName=shortTitle.Substring(lastIndex+1)
showTitle(_branchName)
特例
结束尝试
端接头
私有子SolutionEvents\u BeforeClosing()处理SolutionEvents.BeforeClosing
若并没有,那个么定时器什么都不是
timer.Dispose()
如果结束
端接头
''在IDE关闭时处理计时器。
Public Sub DTEEvents_OnBeginShutdown()处理DTEEvents.OnBeginShutdown
若并没有,那个么定时器什么都不是
timer.Dispose()
如果结束
端接头
“由计时器调用”。
公共子标记(ByVal状态作为对象)
尝试
showTitle(_branchName)
捕获ex作为系统异常
结束尝试
端接头
''在主窗口中显示标题。
私有子showTitle(ByVal标题作为字符串)
SetWindowText(New System.IntPtr(DTE.MainWindow.HWnd),title&“-”&DTE.Name)
端接头

这是在线图库中专门为该作业定制的扩展。签出。

使用MKLINK命令创建指向现有解决方案的链接。就VisualStudio而言,它正在使用链接文件,但任何更改都会转到底层的.sln文件

我在这里写了一篇关于它的博客


对于那些无法使用VB方法的人(比如我),你可以使用一个插件:


它在VisualStudio2008 Ultimate中进行了测试。您可以在VisualStudio的选项菜单中对其进行配置。

我正在使用VSCommands 10显示打开的解决方案文件的完整路径

Friendly Name: {repo}
Solution Path Regex: (?<repo>.*)
我可以快速浏览并看到我在trunk文件夹或rc文件夹中工作,因为我们使用Mercurial(Hg)并为trunk、rc、Prepod和prod保留单独的文件夹,如下所示:

c:\repositories\acme.marketplace.trunk\Acme.Marketplace.web\Acme.Marketplace.Web.sln
c:\repositories\acme.marketplace.rc1
c:\repositories\acme.marketplace.rc2
c:\repositories\acme.marketplace.trunk
c:\repositories\acme.marketplace.preprod
c:\repositories\acme.marketplace.prod

如果您使用的是VisualStudio2010或更高版本,则可以使用扩展名“Visual Studio窗口标题转换器”

安装此程序并使用以下“窗口标题设置”表达式显示解决方案路径:

'sln_dir + "/" + orig_title'
使用扩展管理器下载并安装扩展。有关扩展的详细信息以及如何使用扩展的详细信息,请参见:

如何自定义Visual Studio窗口标题 安装插件

安装扩展后,可以在菜单中找到设置

菜单工具► 选择权► 自定义VS窗口标题

更多信息

自定义Visual Studio窗口标题是Visual Studio的轻量级扩展,允许您更改窗口标题以包含文件夹树:

特征
  • 与解决方案/项目文件的可配置最小和最大深度距离
  • 允许使用特殊标记来帮助处理许多其他可能的场景,包括和
正如在评论中提到的,扩展服务也有同样的目的。

| 49美元 这是一个非常好的(尽管是付费的)Visual Studio扩展,它提供:

  • 选项卡分组
  • 制表符着色
  • 头衔