web-dev-qa-db-ja.com

Visual Studio 2010で、特定の種類のすべてのファイルにカスタムビルドステップを追加するにはどうすればよいですか?

問題

  1. Visual Studio2010プロジェクトに多数のカスタムファイルがあります。
  2. それらが変更されたときに、それらのカスタムファイルに対してツールを実行する必要があります。
  3. このツールは、既存の.cppファイルに含まれる.hファイルを生成します。
  4. ビルドプロセスの一部としてツールを実行したいと思います。
  5. Visual Studio内から実行する必要がありますが、理想的にはmsbuildプロセスの一部として実行することもできます。

既存の標準以下のソリューション

各ファイルで、ファイルを追加するたびに、ファイル設定に移動し、アイテムタイプをカスタムビルドツールに設定してから、[カスタムビルドツール]ダイアログで、コマンドラインパラメーターを設定し、(ハードコードされた)出力を設定し、 (ハードコードされた)追加の依存関係を設定します。

明らかに、これは、カスタムタイプの新しいファイルを追加するたびに、重要でエラーが発生しやすい量の作業であるため、不十分なソリューションです。

目的のソリューション

Visual Studioをセットアップして、拡張子.fooのファイルが何であれ、.fooファイルが変更されると、CPPコードをコンパイルする前にツールバー.exeを実行します。

私が試みたもの

これに基づいて: http://msdn.Microsoft.com/en-us/library/3e889s84(v = vs.100).aspx 。targetsおよび.xmlファイルを設定しようとしました。ただし、Visual Studioに表示されるように新しいアイテムタイプを作成する方法を見つけることも、タイプ.fooのすべてのファイルに魔法のように適用する方法を見つけることもできません。その上、bar.exeツールを呼び出す行為を説明するものにそのいずれかがどのようにリンクしているかがわかりません。

既存のアイテムタイプを追跡し、それらが実際のビルドアクションにどのように変換されるかを判断するために、VisualStudioのすべてのxml/targetsファイルを検索しようとしました。それは常にItemTypeの壁で終わります。そこでは、ProjectItemsSchemaで説明されている束がありますが、それらがどこに実装されているか、または自分でどのように実装するかがわかりません。

MSDNのドキュメントは完全に失敗しており、関連する可能性のあるすべてのページを10回読んだことがありますが、役に立ちませんでした。

Visual Studio 2008では、次のような.rulesファイルを使用して次のような作業を行いました。

<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="Foo Build Rules"
Version="8.00"
>
<Rules>
    <CustomBuildRule
        Name="FooBuild"
        DisplayName="FooGen"
        CommandLine="..\..\tools\FooGen.exe [inputs]"
        Outputs="$(InputName).h"
        AdditionalDependencies="*.foo"
        FileExtensions="*.foo"
        ExecutionDescription="Generating Foos..."
        >
        <Properties>
        </Properties>
    </CustomBuildRule>
</Rules>
</VisualStudioToolFile>

しかし、この機能は2010年に廃止され、新しいシステムで複製する方法を理解できませんでした。

助けて?

22
Charles Randall

プロジェクトファイルにカスタムItemGroupを追加することから始めます。

以下のように:

<ItemGroup>
    <CustomBuild Include="faq.txt">
      <Message>Copying readme...</Message>
      <Command>copy %(Identity) $(OutDir)%(Identity)</Command>
      <Outputs>$(OutDir)%(Identity)</Outputs>
    </CustomBuild>
  </ItemGroup>

次に、カスタムターゲットを作成し、ビルドプロセスのどこでカスタムターゲットを実行するかを定義します。

以下のリンクは、より詳細に、ステップバイステップで説明しています。

お役に立てれば。

ウォークスルー:MSBuildを使用してVisual C++プロジェクトを作成する

方法:カスタムビルドツールをMSBuildプロジェクトに追加する

:現在のリリースでは、IDEは新しいルールの作成をサポートしていません。そのため、プロジェクトのルールファイルを使用する最も簡単な方法は次のとおりです。 Visual C++の以前のリリースを使用して作成されたものは、プロジェクトを現在のリリースに移行することです。

7