SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Visual C++を使ったカスタムMSBuildタスクの開発

ハードリンクを作成するカスタムのMSBuildタスクを開発する

HardLinkTaskを使用する

 HardLinkTaskをMSBuildプロジェクトファイルに追加するには、最初にこのタスクをインポートしてビルドプロセスのスコープ内に置く必要があります。これにはUsingTask要素を使用します。

<UsingTask TaskName="HardLinkTask"
   AssemblyName = "HardLinkTask, Version=1.0.0.0,
   Culture=neutral, PublicKeyToken=a912dca8b5fb92f0"/>

 MSBuildでは.NETの標準アセンブリ読み込みインフラストラクチャが使用されます。つまり、タスクを実装したアセンブリをvcxprojビルドファイル内で指定するために、パスまたはGACに格納されたアセンブリへの完全修飾名を使用できます。前記の例では、GACによる指定を使用しています。

 タスクをMSBuildコマンドラインから直接呼び出すことはできません。Target要素内にネストする必要があります。1つのTarget要素に複数のタスクを指定できますが、今回はカスタムタスク作成のデモが目的なので、HardLinkTaskのみをTarget要素に指定します。

<Target Name="CreateHardLink">
   <HardLinkTask
      SourceFileName="$(HardLinkSource)"
      TargetFileName="$(HardLinkTarget)"/>
</Target>

 パズルの最後のピースとして、PropertyGroup要素を追加します。この要素には、タスクに渡す必要があるプロパティを格納します。

<PropertyGroup>
   <HardLinkSource>C:\source.txt</HardLinkSource>
   <HardLinkTarget>C:\destination.txt</HardLinkTarget>
</PropertyGroup>

 このターゲットを実行するには、コマンドラインからMSBuildを呼び出し、/tスイッチを使ってターゲット名を指定します。

msbuild MyApp.vcxproj /t:CreateHardLink

まとめ

 MSBuildカスタムタスクを使うと、任意のマネージドコードをビルドプロセスの一部として実行できます。C++/CLIは、ネイティブ機能を非常に簡単に利用できるようにするマネージド言語です。ネイティブAPIを通してしか利用できない機能にアクセスするために、多くのカスタムMSBuildタスクが今後書かれるでしょう。C++/CLIはカスタムタスクを開発するための優れた言語です。

 Windows SDKのCreateHardLink関数を使うと、ファイルへのハードリンクを作成できます。ハードリンクは、既存のファイルを指す追加のディレクトリエントリであり、仮想的なコピー操作を実行できます。ハードリンクMSBuildタスクをC++/CLIで作成する手順は簡単です。リンク元とリンク先のファイル名が格納された2つのプロパティを取得し、それらを変換してCreateHardLink呼び出しに適した文字列データ型にしてから、このメソッドをExecuteメソッドの実行中に呼び出します。タスクが完成し、コンパイルが終了したら、MSBuildファイルターゲットにタスクを追加してビルドプロセス中に使用できます。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Nick Wienholt(Nick Wienholt)

シドニーに拠点を置く独立系Windowsおよび.NETコンサルタント。著書に『Maximizing .NET Performance』、共著に『A Programmers Introduction to C# 2.0』(いずれもApress刊)。システムレベルソフトウェアアーキテクチャおよび開発を専門とし、パフォーマンス、セキュリティ、相互運用性、およびデバッグに精通。.NETコミュニティに精力的に参加。Sydney Deep .N...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3823 2009/04/22 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー