UWPのCameraStarterKitサンプルをビルドする

# はじめに

この解説では、UWP の CameraStarterKit のサンプルをビルドします。

https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/CameraStarterKit

https://github.com/microsoft/Windows-universal-samples を Clone もしくは zip  で展開しておきます。

個々のサンプルプロジェクトは、Windows-universal-samples 直下の SharedContent にあるファイルを利用しています。また、サンプルプロジェクトは cpp や cs、vb など複数の言語で用意され、それぞれ別のフォルダに格納されていますが、それらで共通で利用される xaml ファイルなどが同じ階層の shared フォルダに入っています。

今、たとえばあるサンプルのC#のプロジェクトだけ使うとして、必要なファイルだけを一つのフォルダにまとめたいと思ったときに、どのようにファイルをまとめ、ビルドすればよいかについて解説します。

`Windows-universal-samples\Samples\CameraStarterKit\cs` を例にとります。

## ファイルをまとめる

- Windows-universal-samples\Samples\CameraStarterKit\cs
- Windows-universal-samples\Samples\CameraStarterKit\shared
- Windows-universal-samples\SharedContent

のファイルが必要になります。

1. `Samples\CameraStarterKit\cs` のフォルダを `CameraStarterKit` に変更する。（以降では`CameraStarterKit`フォルダといえばこの作成したフォルダのこと。）
2. `Samples\CameraStarterKit\shared` の `App.xaml`、`MainPage.xaml` を`CameraStarterKit`フォルダへコピーする。
3. `CameraStarterKit`フォルダに `Assets`, `Properties` という名前のフォルダをそれぞれ作る。
4. `SharedContent\media` の以下の5このファイルを`CameraStarterKit\Assets` へコピー
    - smalltile-sdk.png
    - splash-sdk.png
    - squaretile-sdk.png
    - storelogo-sdk.png
    - tile-sdk.png
5. `SharedContent\cs` の `AssemblyInfo.cs` と `Default.rd.xml` を `CameraStarterKit\Properties` へコピー

## プロジェクトファイルを編集する

`CameraStarterKit\CameraStarterKit.csproj` をエディタで開く。

基本的には、`<Link>` になっている部分を、実ファイルを直接指すように編集していきます。

### 不要となるディレクトリ名を削除

```xml
  <PropertyGroup>
    <SharedContentDir>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), LICENSE))\SharedContent</SharedContentDir>
  </PropertyGroup>
```
を削除する。

### `<Link>`を削除

#### Content 関係

```xml
    <Content Include="$(SharedContentDir)\cs\Default.rd.xml">
      <Link>Properties\Default.rd.xml</Link>
    </Content>
    <Content Include="$(SharedContentDir)\media\smalltile-sdk.png">
      <Link>Assets\smalltile-sdk.png</Link>
    </Content>
    <Content Include="$(SharedContentDir)\media\splash-sdk.png">
      <Link>Assets\splash-sdk.png</Link>
    </Content>
    <Content Include="$(SharedContentDir)\media\squaretile-sdk.png">
      <Link>Assets\squaretile-sdk.png</Link>
    </Content>
    <Content Include="$(SharedContentDir)\media\storelogo-sdk.png">
      <Link>Assets\storelogo-sdk.png</Link>
    </Content>
    <Content Include="$(SharedContentDir)\media\tile-sdk.png">
      <Link>Assets\tile-sdk.png</Link>
    </Content>
```
を以下のようにする。

```xml
    <Content Include="Properties\Default.rd.xml" />
    <Content Include="Assets\smalltile-sdk.png" />
    <Content Include="Assets\splash-sdk.png" />
    <Content Include="Assets\squaretile-sdk.png" />
    <Content Include="Assets\storelogo-sdk.png" />
    <Content Include="Assets\tile-sdk.png" />
```

### Compile 関係

さらに、

```xml
    <Compile Include="$(SharedContentDir)\cs\AssemblyInfo.cs">
      <Link>Properties\AssemblyInfo.cs</Link>
    </Compile>
```
を

```xml
    <Compile Include="Properties\AssemblyInfo.cs" />
```
に変更する。

### xaml 関係

最後に

```xml
    <ApplicationDefinition Include="..\shared\App.xaml">
      <Link>App.xaml</Link>
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </ApplicationDefinition>
    <Page Include="..\shared\MainPage.xaml">
      <Link>MainPage.xaml</Link>
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
```

を以下のように差し替える。

```xml
    <ApplicationDefinition Include="App.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </ApplicationDefinition>
    <Page Include="MainPage.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
```

## ビルドと実行

1. CameraStarterKit.sln を Visual Studio で開き、メニューバーのすぐ下にある構成をARMからx64に変更する。
2. ファイルまわりで警告が出ていないことを確認しつつビルドする。
    - 配置関係、ターゲット関係でDEP3321エラーが出たときは、プロジェクトのプロパティを開いてターゲットを落とし、再度ビルドする。
3. Visual Studio からデバッグ実行してみる。
    - マイクとカメラへのアクセスを許可する必要がある。

以上です。