native のnugetパッケージを作る

[coapp](http://coapp.org/index.html) c/c++ の Nuget package をビルドするツールです。
自分で nuget パッケージを作った時のノートです。

**CoApp を使うと便利なこと**

1. propsを作ってくれます。
Win32|x64, VS2010|VS2012|VS2013, Debug|Release の分岐を生成してくれるのが便利です。
2. 一度CoApp用ファイルを用意すれば、version を更新するだけでよくなります。  
構成が変わらない限りは、ですが。

**CoApp の不便なこと**

1. ファイルのエラーが分からない。
リリースされた頃よりは分りやすくなっているのですが、何がダメなのか分らないのです。;が抜けているとか、"," を使えないところでつけてしまった場合が、とりあえずファイルエラーしか得られない。

2. 構文強調サポートがない
自分で書けばいいのだろうけど、公式の用意している notepad++ 用のファイルしか見たことは無いです。

3. 情報が見つからない
利用している人を見かけないです。

## setup
[公式のインストール手順](http://coapp.org/tutorials/installation.html)

0. ps でスクリプトが実行できる状態にする。 
[きっとこの辺り](http://qiita.com/alchemist/items/e6706cd425f8f5e5032e)

1. "coapp" のexeをダウンロード/インストールする。
[インストーラー](http://downloads.coapp.org/files/CoApp.Tools.Powershell.msi)があるのでそれ。
成功したらPowershell を実行し、以下のコマンドで何か数字が出ればOK。
```ps1
PS> CoAppToolsVersion 
```
```実行結果
CoApp Powershell Developer Tools Version: 1.23.521.0```

## hello world
実際にCoAppを利用して、nuget package を作成します。
以下のようなフォルダ構成という想定です。

```フォルダ構成
source/
    myheader.h
    myheader2.h
    debug/
         mylib.lib
         mylib.dll
    release/
         mylib.lib
         mylib.dll
build/
    hello.autopkg
```

```hello.autopkg
nuget {
    nuspec {
        // 識別用のID です。
        // 作成するファイル名に利用されます。
        id =my-hello-world-coapp-library;
        // 作成するnugetパッケージのバージョンです。
        // 作成するファイル名に利用されます。
        version : 1.0.0.1;
        // nuget
        title:coapp hello world library;
        authors:{ushizaki.manabu};
        owners: {ushizaki.manabu};
        licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0";
        projectUrl: "http://localhost";
        iconUrl: "http://localhost";
        requireLicenseAcceptance:false;
        // パッケージマネージャで表示される要約コメント。長いと入らない。
        summary:hello world;
        // パッケージマネージャで表示されるモジュール説明。長い説明はこちら？
        Description:サンプルで作成した nuget パッケージです。;
    };

    files {
        // include 用ファイル指定
        include: {
         ..\source\*.h, 
         // ..\source\*.hpp, // .hpp なヘッダーファイルがあるならば。
         }; 

        // 32bit/release 版 lib/dll の指定
        [Win32, release]
        {
            lib: {
             ..\source\release\mylib.lib,
            };
            bin: {
             ..\source\release\mylib.dll,
            };
        }
        // 32bit/debug 版 lib/dll の指定
        [Win32, debug]
        {
            lib: {
             ..\source\debug\mylib.lib,
            };
            bin: {
             ..\source\debug\mylib.dll,
            };
        }
    };
}
```

### 1. powershell を起動、Build フォルダに移動してから、以下のコマンドを実行

```powershell
Write-NuGetPackage .\hello.autopkg
```

カレントフォルダ(この場合はBuildフォルダ下)に以下のファイルが作成されます。
* my-hello-world-coapp-library.1.0.0.1.nupkg
これに header と lib が含まれている。
* my-hello-world-coapp-library.redist.1.0.0.1.nupkg
bin（主にdllファイル）で指定したファイルが含まれている。
* my-hello-world-coapp-library.symbols.1.0.0.1.nupkg
bin と symbols（主にpdbファイル） で指定したファイルが含まれている。利用するには、いろいろ用意する必要があるので今回は省略。

Nuget Package Explore で それぞれの nupkg を覗いていみると実際にそれらファイルが含まれていることが分かると思います。

### 2. ローカルのnuget パッケージ用意  
[ローカルフォルダをnugetのリポジトリにする](http://qiita.com/Temarin_PITA/items/293780adf571b802795c)等を参考にローカルフォルダをnugetリポジトリに仕立て上げ、そこに、先ほど作った nuget パッケージを移動します。

### 3. プロジェクトからパッケージ追加
利用したいプロジェクトから、"Nuget パッケージの管理..."より、ローカルのパッケージに
先ほど作成したnugetパッケージが列挙されるはずです。
されない場合は、"ローカルのnuget パッケージ用意" の設定を確認してください。

ビルドすれば、出力フォルダにdllがコピーされます。

includeファイルやlibファイルは、他のnugetと同様に利用しているソリューションのpackagesフォルダ下にあります。

## その他

例の hello.autopkg で Write-NuGetPackage を実行すると、値が設定されていない旨の警告が多数出てきますが、自分は private なパッケージしか作っていないので無視しています。