3

私はT4MVCを使用していますが、これに満足しており、それを維持したいと考えています。実行時の欠陥を抑えます。残念ながら、ビューとコンテンツ(T4MVCではビューとリンク)に移動するのは難しくなります。Resharperを使用しても、参照されているアイテムに移動できません。

T4MVCとResharperナビゲーション

これを行うためのマクロを手で作成することはできますか?これまでVSIDEマクロを作成したことがないので、「定義に移動」プロセスの内部結果など、可能であれば、いくつかのことを取得する方法を理解していません。

T4MVCに慣れていない場合は、一般的にマクロが役立つ可能性があります。

  1. トークンが与えられた場合:Links.Content.Scripts.jQuery_jsファイルMyView.cshtmlで、「(F12)定義に移動」。これは適切に動作します。

  2. 関連する割り当てに到達し public readonly string jQuery_js = "~/Content/Scripts/jQuery.js";たら、T4MVCによって生成されたファイル(Davidに感謝しますが、実際に表示する必要はありません)で、割り当てられた文字列をキャプチャしてファイルを閉じます。

  3. ソリューションエクスプローラーで、キャプチャされた文字列で表されるPhysicalPathに移動します。

このプロセスは、ビュー/レイアウト/マスターページ/パーシャルなどでも機能します。

これを行うためにマクロまたはマクロへのリンクを提供する場合、または別の解決策がある場合は、すばらしいです。それ以外の場合は、VSマクロでステップ3を実行する方法に関するヒントを特に高く評価し、私から賛成票を受け取ります。完了したら、回答としてマクロをここに投稿します。

ありがとう!

4

1 に答える 1

2

これが役立つVisualStudioマクロです。

それが何をするか

これで、おそらく次のような場所でT4MVC参照を使用します。

  • レイアウト=MVC.Shared.Views.MasterSiteTheme;
  • ScriptManager.AddResource(Links.Content.Script.jQueryXYZ_js);
  • <link type = "text / css" href = "@ Links.Content.Style.SiteTheme_css" />
  • View(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で生成された空のコントローラーメソッドは処理しません。あなたが前にしたのと同じ場所であなたが捨てられるもの。

コンテンツ/アセット/リンクリソースの場合、たとえば画像ファイルの場合、ソリューションエクスプローラーでそのリソースに移動するのはおそらく適切ですが、VisualStudioのドキュメントにはその機能が表示されませんでした。

于 2012-06-19T13:42:52.907 に答える