10

Visual Studio (2010 以降) でファイルのプロパティを確認すると、[全般] セクションで項目の種類を設定できます。たとえば、C++ の場合、アイテム タイプは「C/C++ コンパイラ」です。

利用可能な「カスタム ビルド ツール」タイプがありますが、そのカテゴリに分類される各ファイルに対して完全に構成する必要があります。

私の質問は次のとおりです。

  1. 「カスタム ビルド ツール」を構成して、アイテム タイプ リストで使用できるようにする方法はありますか。
  2. ファイル拡張子をこの新しいアイテム タイプ ビルダーに関連付けることはできますか?
4

1 に答える 1

15

次の参考文献を使用して答えを見つけました。

完全なセットアップは非常に複雑であることが判明したため、最小限の手順で最初の 2 つの質問に答えることに限定します。

MSVC でカスタム ビルド ツールを追加するには

  1. プロジェクト ファイル ( vcxproj) に、新しいビルド定義を含めます (おそらくシステム全体に含める方法がありますが、まだ調べていません)。

    <ImportGroup Label="ExtensionTargets">
    <Import Project="mybuild.targets" />
    </ImportGroup>
    

これは閉店直前に行くことができます</Project>

  1. mybuild.targetsファイルと同じフォルダーにというテキスト ファイルを作成しvcxprojます。

  2. に次を挿入しますmybuild.targets

    <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>
        <PropertyPageSchema 
            Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
      </ItemGroup>
    </Project>
    
  3. このターゲット ファイルは、詳細を含む xml ファイルを参照します ($(MSBuildThisFileDirectory)$(MSBuildThisFileName).xmlこの例では mybuild.xml を参照しています)。を作成しますmybuild.xml

  4. に次を挿入しますmybuild.xml

    <?xml version="1.0" encoding="utf-8"?>
    <ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
          xmlns:sys="clr-namespace:System;assembly=mscorlib">
      <ItemType Name="MYBUILD" DisplayName="My Custom Build" />
    </ProjectSchemaDefinitions>
    

今行ったこと: プロジェクト ファイルに新しいターゲット定義が含まれるようになりました ( mybuild.targets)。このファイルには通常、実際のビルドの実行方法に関する詳細情報が含まれていますが、ここではmybuild.xmlファイルへのインクルードのみが含まれています。このmybuild.xmlファイルには、内部名MYBUILDと表示名で呼び出される新しい項目タイプの定義が含まれていますMy Custom Build。プロジェクトが Visual Studio で再度開かれると、アイテム タイプ リストで新しいアイテム タイプが使用可能になります。これを選択すると、このアイテムのタイプが and に設定MYBUILDされ、この時点ではその種類のアイテムに対してルールが定義されていないため、ビルドから単純に無視されます。

ファイル拡張子をカスタム アイテム タイプ MSVC に関連付けるには

これは、次の 2 つの手順で行われます。

  1. ファイル拡張子をコンテンツ タイプに関連付けます。mybuild.xmlこれは、次のようにエントリを追加することによって行われます。

     <FileExtension Name="*.myext" ContentType="MYBUILD" />
    
  2. コンテンツ タイプをアイテム タイプに関連付けます。mybuild.xmlこれは、次のようにエントリを追加することによって行われます。

     <ContentType Name="MYBUILD" DisplayName="My Custom Build" ItemType="MYBUILD" />
    

この時点で、mybuild.xml次のようになります。

    <?xml version="1.0" encoding="utf-8"?>
    <ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
          xmlns:sys="clr-namespace:System;assembly=mscorlib">
      <ItemType Name="MYBUILD" DisplayName="My Custom Build" />
      <FileExtension Name="*.hh" ContentType="MYBUILD" />
      <ContentType Name="MYBUILD" DisplayName="My Custom Build" ItemType="MYBUILD" />
    </ProjectSchemaDefinitions>

今行ったこと: Visual Studio は、拡張機能.myextに type のデータが含まれていることを認識するようになりましたMYBUILD。また、 type のコンテンツを持つファイルが typeMYBUILDのアイテムであることも認識していますMYBUILD。Visual Studio でプロジェクトを再度開くと、拡張子 のファイルを追加すると.myext、Visual Studio はこれらのファイルのアイテム タイプを自動的に "My Custom Build" に設定します。

カスタム アイテム MSVC でカスタム ツールを実行するには

この時点で、カスタム項目タイプに関連付けられたファイル拡張子があります。そのアイテム タイプを一連のビルド ルールに関連付ける必要があります。

  1. アイテム タイプをビルド ターゲットに関連付けます。mybuild.targetsPropertyPageSchema と同じ ItemGroup に以下を追加します。

     <AvailableItemName Include="MYBUILD">
       <Targets>_MYBUILD</Targets>
     </AvailableItemName>
    

そのため、次のようになります。

    <ItemGroup>
      <PropertyPageSchema
            Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
      <AvailableItemName Include="MYBUILD">
        <Targets>_MYBUILD</Targets>
      </AvailableItemName>
    </ItemGroup>
  1. カスタム ターゲットを定義します。これは、ビルド タスクの構成に使用する必要があるすべてのプロパティと変数をマップする場所です。次のステップでは、コマンド ライン テンプレートを使用するビルド タスクを使用するため、ターゲットで実際のコマンド ラインを構成します。ItemGroupこれは、前のステップで定義したすぐ下になります。

     <Target Name="_MYBUILD">
         <MYBUILD CommandLineTemplate="explorer $(IntDir)"></MYBUILD>
     </Target>
    

コマンド ラインは単にエクスプローラー ウィンドウを開きます。

  1. カスタム ビルド タスクを宣言します。Targetこれは、前のステップの直後に続きます。

     <UsingTask TaskName="MYBUILD" TaskFactory="XamlTaskFactory" AssemblyName="Microsoft.Build.Tasks.v4.0">
         <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
     </UsingTask>
    

ここでは、ファイルで定義されるタスクを参照しmybuild.xmlます。

  1. mybuild.xml、次の規則を追加します。

     <Rule Name="MYBUILD" PageTemplate="tool" DisplayName="My Custom Build" Order="200"/>
    

今行ったこと: カスタム アイテム タイプをカスタム ターゲットにマッピングし、エクスプローラ ウィンドウを開くカスタム ビルド タスクを作成しました。ファイルをビルド.myextすると、Visual Studio がエクスプローラー ウィンドウをポップすることが期待できるようになりました。

ビルドのカスタマイズ

プロパティ ウィンドウに構成フィールドを追加し、それらを変数にマップし、それらを使用してタスクを構成する方法があります。これについてはここでは説明しませんが、上部にあるリンクで説明しています。

于 2015-08-23T18:39:48.953 に答える