Azure FunctionsでNugetパッケージを参照する方法が1.X系と2.X系でだいぶ違う

Azure Functionsのランタイム2.0が一般提供になったらしい。2018年10月10日現在、Azureポータルからデフォルトで作成した関数は2.0系でホストされる様子。C#スクリプトからNugetパッケージを参照したくて調べたところいろいろと情報が出てきたので試してみたものの、うまくいかない。結論は主題の通り、1.0系と2.0系で参照方法がだいぶ違ってたからだった。

1.0系参考


普通にググるとこちらが出てきたものの、同じようにやっても一向にパッケージをインストールしてくれないので、あれ?と。

2.0系参考


ランタイムが変わってNuGetの使い方が変わってた。

対応方法

ランタイムに応じてそれぞれに合った方法で参照する必要がある。
どちらのバージョンも使用したいNugetパッケージの名前とバージョンを定義したファイルをFunctionの関数が書いているディレクトリに配置すればよい。
1.0系はproject.jsonを以下のような感じで記載して配置。

{
  "frameworks": {
     "net46":{
         "dependencies": {
                "Elasticsearch.Net": "6.3.1"
         }
      }
   }
}

2.0系はXML形式で名前をfunction.projとしたものを配置する。

<Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
              <TargetFramework>netstandard2.0</TargetFramework>
       </PropertyGroup>

       <ItemGroup>
              <PackageReference Include="Elasticsearch.Net" Version="6.3.1"/>
              <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.13"/>
       </ItemGroup>

</Project>

いずれのバージョンも上記手順だけでrun.csxには特別な記述は不要。普通にusing でOK。

なおVisual Studioを使ってプリコンパイルのFunctionを作るときは上記手順は無視して、普通にIDE上でNuGetするだけで良い。