特集:Longhornアプリケーションの構築方法FTP Online(3/6 ページ)

» 2004年06月01日 02時23分 公開
[Brent Rector,FTPOnline]
XAMLファイルのコンパイル

 ビルドシステムは、それぞれのXAMLファイルをマネージドクラス定義へとコンパイルする。デフォルトでは、マネージドクラスはXAMLソースファイルと同一のファイル名を持つ。例えば、Markup.xamlファイルはMarkupという名のクラス定義にコンパイルされる。DefaultClrNameSpaceプロパティをIntroLonghornに指定すると、ビルドシステムは生成されるクラスのIntroLonghorn名前空間プリフィックスを付ける。つまり、Markup.xaml定義から、ビルドシステムがIntroLonghorn.Markupというクラス名を生成することになる。

 ほかのプロジェクトをインポートする前にプロパティは定義しているので、インポートされたプロジェクト内の規則は指定されたプロパティ値を使うことになる。例題では、LanguageプロパティがC#に定義されているため、C#アプリケーションに対する固有のビルド規則が適用される。

 ビルドターゲットの規則はLonghornアプリケーションの実行可能ファイルを生成する。しかし、これらのビルド規則を全てのプロジェクトファイルに指定するのは、単調な作業のくり返しとなる。そのため、WindowsApplication.targetという名の定義済みのプロジェクトファイルをインポートすることにする。

<Import Project=
   "$(LAPI)\WindowsApplication.target" />

 このインポートされるファイルは、Windowsアプリケーションを開発するための標準のビルド規則を含み、Buildと名づけられたターゲットを間接的に定義する。

 ItemGroup要素とその子要素のItemは、アプリケーションをビルドするために必要なすべての要素を定義する。ユーザーはType属性がApplicationDefinitionに設定されたItem要素を1つ持つ必要がある。 このItem要素は、アプリケーションで使用する、Applicationオブジェクトを定義したファイルを指定する。 このApplicationオブジェクトは、MSAvalon.Windows.Applicationクラスもしくは MSAvalon.Windows.Navigation.NavigationApplicationクラスの典型的なインスタンスである。どちらのクラスも後述する。

<Item Type="ApplicationDefinition"
   Include="MyApp.xaml" />

 Type属性がPagesに設定されている各Item要素は、以下のようなXAMLファイルのセットを定義する。ビルドシステムは、これらのXAML定義をクラスにコンパイルし、それらを生成されるアセンブリを含める。

<Item Type="Pages"
   Include="HomePage.xaml" />
<Item Type="Pages"
   Include="DetailPage.xaml" />

 Type属性がCodeに設定されている各Item要素は、以下のようなソースファイルを表現する。ビルドシステムは、プロジェクトのLanguageプロパティで選択される適切なコンパイラを使い、これらのソースファイルをコンパイルする。

<Item Type="Code"
   Include="DetailPage.xaml.cs"/>

 このプロジェクトは他のプロジェクトに依存している場合もある。ビルドシステムがこのプロジェクトをビルドするには、それらの従属するプロジェクトをコンパイルしなければならない。これらの従属するプロジェクトは、Type属性がDependentProjectsに設定されたItem要素を使って列挙できる。

<Item Type="DependentProjects"
   Include=
   "MyDependentAssembly.proj" />

 また、このプロジェクトのコードは、「コンポーネントアセンブリ」とも呼ばれる既にビルドされたアセンブリの型を使用するかもしれない。コンポーネントアセンブリを使ったコードをコンパイルするためには、コンパイラは各アセンブリを参照する必要がある。また、アプリケーションを展開するときに、これらのコンポーネントアセンブリも展開する必要がある。各コンポーネントアセンブリは、Type属性がComponentsのItem要素を使って列挙できる。

<Item Type="Components"
   Include="SomeThirdParty.dll" />

 参照されるアセンブリは、コンポーネントアセンブリとは若干異なる。どちらの場合も、コードはビルド済みのアセンブリの型を利用する。しかし、コンポーネントアセンブリをユーザアプリケーションの一部として配布しても、参照されるアセンブリはアプリケーションの一部として配布することはない。ビルドシステムでは、この違いを知る必要がある。

 コンパイラはビルド時に指定されたアセンブリを参照するが、そのアセンブリはアプリケーションの展開の一部に含まれないということを指定するには、Type属性がReferencesに設定されたItem要素を使用する。ビルドシステムは、例えばmscorlib.dllやSystem.dll、PresentationFramework.dllといった標準のシステムアセンブリへの参照を自動的にインクルードするが、アプリケーションが参照する必要のある非標準のアセンブリは明示的に追加する必要がある。

<Item Type="References"
   Include="SharedThirdParty.dll" />

 アプリケーションはリソースを使用することもできる。次のように、Type属性がResourcesに設定されたItem要素は、アプリケーションが使用するリソースを定義する。ビルドシステムは、生成されるアセンブリにリソースを埋め込むか、またはリソースをスタンドアロンのファイルとしてインクルードできる。また、ビルドシステムは、地域化に対応するリソースを、サテライトアセンブリに追加できる。

<Item Type="Resources"
   Include="Picture1.jpg"
   FileStorage="embedded"
      Localizable="False"/>
<Item Type="Resources"
   Include="Picture2.jpg"
   FileStorage="embedded"
      Localizable="True"/>

 続いて、実行型のアプリケーションに追加するライブラリをビルドする(コラム3参照)。

コラム3:ライブラリプロジェクトの生成

 アプリケーションプロジェクトとライブラリプロジェクトの主な違いは、ライブラリプロジェクトは一般的にアプリケーション定義アイテムを含まない点と、TargetTypeプロパティの値をLibraryに設定する点にある。

<Project DefaultTargets="Build">
   <PropertyGroup>
      <Property Language="C#" />
      <Property DefaultClrNameSpace=
         "IntroLonghorn" />
      <Property TargetName="MyLibrary" />
      <Property TargetType="Library" />
   </PropertyGroup>

   <Import Project="
      "$(LAPI)\WindowsApplication.target" />

   <ItemGroup>
      <Item Type="Pages" Include="ErrorPage.xaml" />
      <Item Type="Code"
         Include="ErrorPage.xaml.cs"/>
      <Item Type="Code" Include="Utilities.cs"/>

      <Item Type="DependentProjects"
         Include="MyDependentAssembly.proj" />

      <Item Type="Components" Include=
         "SomeThirdParty.dll" />

      <Item Type="Resources"
         Include="Picture1.jpg"
      FileStorage="embedded"
         Localizable="False"/>
      <Item Type="Resources"
         Include="Picture2.jpg"
         FileStorage="embedded"
            Localizable="True"/>
   </ItemGroup>
</Project>

© Copyright 2001-2005 Fawcette Technical Publications

注目のテーマ