2

VisualStudioの新しいコードファイルの先頭に署名と日付をすばやく定期的に追加する方法を探しています。

マクロを使用してこれを行うためのチュートリアルがいくつかありますが、VS2012ではマクロがサポートされなくなったようです。

ヘッダーをコードスニペットとして定義してスニペットを挿入することはできますが、スニペットは現在の日付の取得をサポートしていません。

次のT4テンプレートを使用して正しいテキストを生成できます。

<#@ template debug="false" hostspecific="false" language="C#" #>

// <author>Pieter Müller</author>
// <date><#=DateTime.Now.ToString("yyyy-MM-dd")#></date>

<#@ output extension=".cs" #>

これにより、次の結果が得られます。これは完璧です。

// <author>Pieter Müller</author>
// <date>2012-10-30</date>

問題は、このコードを新しいコードファイルに、自動または手動で、類似したものInsert Snippetまたはショートカットキーを使用して、すばやく定期的に挿入する方法はありますか?

答えがないが、必要な署名ヘッダーを生成するための良いアイデアがある場合は、コメントを残してください。ありがとう!

4

2 に答える 2

3

自分の質問に答えるのは嫌いですが、ハックレベルが9000を超えているにもかかわらず、T4テンプレートをスニペットとして使用する方法を考え出しました。これは、スニペットを生成するT4テンプレートを作成することで機能し、スニペットは自動的にコピーされます。 VisualStudioスニペットフォルダー。

  • Text Templateプロジェクトにアイテムを追加します。

  • スニペットをビルドするように設定します。スニペットは、挿入するコードをビルドします。私の質問の例では、T4テンプレートで生成するスニペットXMLは次のようになります。

    <?xml version="1.0" encoding="utf-8"?>
    <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
      <CodeSnippet Format="1.0.0">
        <Header>
          <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
          </SnippetTypes>
          <Title>DateHeaderSnippet</Title>
          <Author>user</Author>
        </Header>
        <Snippet>
          <Code Language="csharp">
            <![CDATA[//    <author>Pieter Muller</author>
    //    <date>{Today's Date}</date>]]>
          </Code>
        </Snippet>
      </CodeSnippet>
    </CodeSnippets>
    
    • T4テンプレートを使用して上記のXMLを生成するために、2つの変更を加えてほぼ逐語的にXMLを挿入できます。まず、この行:

      <?xml version="1.0" encoding="utf-8"?>
      

      手動のWriteLineステートメント内にある必要があります。そうでない場合、<?xmlタグはT4テンプレートプロセッサを混乱させます。

      <# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); #>
      
    • 次に、T4処理を使用して、今日の日付をスニペットXMLに挿入するため、次のように変更します。

              <![CDATA[//    <author>Pieter Muller</author>
      //    <date>{Today's Date}</date>]]>
      

      に:

              <![CDATA[//    <author>Pieter Muller2</author>
      //    <date><#=DateTime.Now.ToString("yyyy-MM-dd")#></date>]]>
      
  • また、T4テンプレートの最後に非常にハッキーなコードを追加します。このコードは、出力ファイルを手動で読み取り、スニペットファイルに書き込みます。これの厄介な部分は、絶対パスを指定する必要があることです。完全なT4コードは次のようになります。

    <#@ template debug="false" hostspecific="false" language="C#" #>
    <#@ output extension=".txt" #>
    <# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); #>
    <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
      <CodeSnippet Format="1.0.0">
        <Header>
          <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
          </SnippetTypes>
          <Title>DateHeaderSnippet</Title>
          <Author>user</Author>
        </Header>
        <Snippet>
          <Code Language="csharp">
            <![CDATA[//    <author>Pieter Muller2</author>
    //    <date><#=DateTime.Now.ToString("yyyy-MM-dd")#></date>]]>
          </Code>
        </Snippet>
      </CodeSnippet>
    </CodeSnippets>
    <#    
        System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\Users\Pieter\Documents\Visual Studio 2010\Projects\tmp\tmp\TextTemplateToWriteHeaderTemplate.txt");
        string sourceText = sr.ReadToEnd();
        sr.Close();
    
        System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\Users\Pieter\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets\tryout.snippet");    
        sw.WriteLine(sourceText);    
        sw.Close();    
    #>
    
  • T4テンプレートを2回コンパイルする必要があります。最初の実行でスニペットコードが生成され、2番目の実行で前の実行の出力がスニペットフォルダーに書き込まれます。これを行うには、ソリューションエクスプローラーでテンプレートを右クリックし、をクリックしますRun Custom Tool

  • これで、コード内の任意の場所を右クリックして、グループInsert Snippet...から生成されたスニペットを選択して選択できます。My Code Snippets結果:

    //    <author>Pieter Muller2</author>
    //    <date>2012-11-09</date>
    

単純な作成者と日付ヘッダーを挿入するだけでは、これは非常に面倒なことですが、他の誰かがこの手法をより壮大なものに使用できることを願っています。この方法で、ほぼすべての種類の動的スニペットを生成できます。

于 2012-11-09T08:25:16.430 に答える
2

強力なテンプレートを備えたReSharperを使用していることを願っています。テンプレート変数の非常に単純な構成を使用して、例を実装しました ここに画像の説明を入力してください

ここで、「hd」と入力してこのマクロのタブを押すと、次の結果が表示されます。 ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2012-11-04T21:17:14.243 に答える