我用T4MVC,我很喜欢它,并希望保持它 - 它保持下来运行时的缺陷。 不幸的是,这使得它更难虽然导航到的意见和内容(又名意见和链接T4MVC)。 即使使用ReSharper的,我无法浏览到所引用的项目:
T4MVC和ReSharper的导航
我能拿到手建立一个宏观做到这一点? 从未以前建造一个IDE VS宏,我没有关于如何得到一些东西,比如“转到定义”过程的内部结果的把握,如果这甚至有可能。
如果你不熟悉T4MVC,这里通常是上述宏可能会做些什么来帮助:
鉴于令牌: Links.Content.Scripts.jQuery_js
在文件MyView.cshtml,“(F12),转到定义”。 这正常行为。
已经到达相关分配: public readonly string jQuery_js = "~/Content/Scripts/jQuery.js";
由T4MVC生成的文件(这是非常好的,谢谢大卫,但我们并不需要查看),捕获指定字符串并关闭文件。
在解决方案浏览器导航到由所捕获的字符串所表示的PhysicalPath。
这个过程也将工作的意见/布局/主页/分音,等等。
如果你提供一个宏或连结宏来做到这一点,或有另一种解决方案,精彩。 否则,怎么办第3步简单地在VS宏提示将特别赞赏,并收到我给予好评。 完成后我会在这里发表宏追溯到一个答案。
谢谢!
下面是一个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中的文档该功能。