-
- Page 2
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.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
Nick Wienholt(Nick Wienholt)
シドニーに拠点を置く独立系Windowsおよび.NETコンサルタント。著書に『Maximizing .NET Performance』、共著に『A Programmers Introduction to C# 2.0』(いずれもApress刊)。システムレベルソフトウェアアーキテクチャおよび開発を専門とし、パフォーマンス、セキュリティ、相互運用性、およびデバッグに精通。.NETコミュニティに精力的に参加。Sydney Deep .N...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
