Visual Studio中的宏导航到T4MVC链接(Visual Studio macro to

2019-09-18 05:47发布

我用T4MVC,我很喜欢它,并希望保持它 - 它保持下来运行时的缺陷。 不幸的是,这使得它更难虽然导航到的意见和内容(又名意见和链接T4MVC)。 即使使用ReSharper的,我无法浏览到所引用的项目:

T4MVC和ReSharper的导航

我能拿到手建立一个宏观做到这一点? 从未以前建造一个IDE VS宏,我没有关于如何得到一些东西,比如“转到定义”过程的内部结果的把握,如果这甚至有可能。

如果你不熟悉T4MVC,这里通常是上述宏可能会做些什么来帮助:

  1. 鉴于令牌: Links.Content.Scripts.jQuery_js在文件MyView.cshtml,“(F12),转到定义”。 这正常行为。

  2. 已经到达相关分配: public readonly string jQuery_js = "~/Content/Scripts/jQuery.js"; 由T4MVC生成的文件(这是非常好的,谢谢大卫,但我们并不需要查看),捕获指定字符串并关闭文件。

  3. 在解决方案浏览器导航到由所捕获的字符串所表示的PhysicalPath。

这个过程也将工作的意见/布局/主页/分音,等等。

如果你提供一个宏或连结宏来做到这一点,或有另一种解决方案,精彩。 否则,怎么办第3步简单地在VS宏提示将特别赞赏,并收到我给予好评。 完成后我会在这里发表宏追溯到一个答案。

谢谢!

Answer 1:

下面是一个Visual Studio宏来帮忙。

它能做什么

现在,你可能在这样的地方使用T4MVC引用:

  • 布局= MVC.Shared.Views.MasterSiteTheme;
  • ScriptManager.AddResource(Links.Content.Script.jQueryXYZ_js);
  • <链接类型= “文本/ CSS的” href = “@ Links.Content.Style.SiteTheme_css”/>
  • 返回查看(MVC.Account.Views.SignIn);
  • @ Html.Partial(MVC.Common.Views.ContextNavigationTree)
  • @ Html.ActionLink( “登录/注册”,MVC.Account.SignIn())

F12(转到定义)已经适用于最后一颗子弹(行动),但该黑客是为了掩护其他情况下(资源)。

Imports EnvDTE
Imports System.IO

Public Module NavT4Link
    Sub NavigateToLink()
        DTE.ExecuteCommand("Edit.GoToDefinition")
        Dim navpath As String = Path.GetFileName(DTE.ActiveDocument.FullName)
        Dim isContentLink As Boolean = navpath.Equals("T4MVC.cs")
        If (isContentLink Or navpath.EndsWith("Controller.generated.cs")) Then
            Dim t4doc As TextDocument = DTE.ActiveDocument.Object()
            navpath = CurrentLinePathConstant(t4doc)
            If isContentLink Then
                t4doc.Selection.MoveToPoint(t4doc.Selection.ActivePoint.CodeElement(vsCMElement.vsCMElementClass).StartPoint)
                t4doc.Selection.FindText("URLPATH")
                navpath = Path.Combine(CurrentLinePathConstant(t4doc), navpath)
            End If
            If navpath.StartsWith("~") Then
                DTE.ActiveDocument.Close(vsSaveChanges.vsSaveChangesPrompt)
                Dim proj As Object = DTE.Solution.FindProjectItem(DTE.ActiveDocument.FullName).ContainingProject
                navpath = Path.GetDirectoryName(proj.Fullname()) + navpath.TrimStart("~")
                DTE.ItemOperations.OpenFile(navpath)
            End If
        End If
    End Sub

    Function CurrentLinePathConstant(ByVal t4doc As TextDocument) As String
        t4doc.Selection.SelectLine()
        Dim sa() As String = t4doc.Selection.Text().Split("""")
        If sa.Length > 1 Then Return sa(sa.Length - 2) Else Return ""
    End Function
End Module

安装

  • 在Visual Studio中,按 “ALT-F8” 打开宏资源管理器。
  • 右键点击“我的宏”,选择“新建模块...”,然后单击“添加”。
  • 替换所有与此处显示的代码的文本。
  • 保存并退出宏编辑器。
  • 打开“工具:选项”。
  • 在左窗格中,选择“环境:键盘”。
  • 在文本字段中输入“T4”的“含显示命令”。
  • 在“按下快捷键:”字段中按“F12”键。
  • 点击“分配”和“OK”。

在未打补丁的VS,这个安装过程不会导致“绑定”宏。 一种解决方法是(CTRL-SHIFT-RR)来记录一个空宏,将代码粘贴到它不重命名它 。 如果有人知道更佐证的方式安装在VS宏,请评论。

备注/注意事项

这意味着要取代目前的F12功能,所以如果它不是一个T4MVC链接,它会做平常,否则继续以打开资源。 它可以处理大多数情况下,但不是T4MVC生成空的控制器方法。 那些你得到你之前做了同一个地方倾倒了。

对于内容/资产/链路资源,导航到它在解决方案资源很可能会在顺序,例如图像文件,但我没有看到在Visual Studio中的文档该功能。



文章来源: Visual Studio macro to navigate to T4MVC link