Azure Functions を使用すると、C#関数でNuGetパッケージを参照して使用できますか?
はい!現在、Azure FunctionsポータルはNuGetパッケージを追加および管理するメカニズムを提供していませんが、ランタイムはNuGet参照をサポートし、関数のコンパイルおよび実行時にそれらが正しく使用されるようにします。
依存関係を定義するには、必要なNuGetパッケージ参照を含むProject.json
ファイルを作成する必要があります。 Microsoft.ProjectOxford.Face
バージョン1.1.0への参照を追加する例を次に示します。
{
"frameworks": {
"net46":{
"dependencies": {
"Microsoft.ProjectOxford.Face": "1.1.0"
}
}
}
}
Azure Functionsポータルは、関数ファイルを管理する便利な方法を提供します。これを使用して、project.json
を作成(またはアップロード)できます。
project.json
ファイルが作成されている場合は、オプションをクリックしてファイルをアップロードすることもできます)project.json
という名前を付け、パッケージ参照を定義します(上記の例をテンプレートとして使用できます)。パッケージの復元プロセスが開始され、ログウィンドウに次のような出力が表示されます。
2016-04-04T19:02:48.745 Restoring packages.
2016-04-04T19:02:48.745 Starting NuGet restore
2016-04-04T19:02:50.183 MSBuild auto-detection: using msbuild version '14.0' from 'D:\Program Files (x86)\MSBuild\14.0\bin'.
2016-04-04T19:02:50.261 Feeds used:
2016-04-04T19:02:50.261 C:\DWASFiles\Sites\facavalfunctest\LocalAppData\NuGet\Cache
2016-04-04T19:02:50.261 https://api.nuget.org/v3/index.json
2016-04-04T19:02:50.261
2016-04-04T19:02:50.511 Restoring packages for D:\home\site\wwwroot\HttpTriggerCSharp1\Project.json...
2016-04-04T19:02:52.800 Installing Newtonsoft.Json 6.0.8.
2016-04-04T19:02:52.800 Installing Microsoft.ProjectOxford.Face 1.1.0.
2016-04-04T19:02:57.095 All packages are compatible with .NETFramework,Version=v4.6.
2016-04-04T19:02:57.189
2016-04-04T19:02:57.189
2016-04-04T19:02:57.455 Packages restored.
予想どおり、Azure Functionsランタイムはパッケージアセンブリに参照を自動的に追加するため、#r "AssemblyName"
を使用してアセンブリ参照を明示的に追加する必要はありません。必要なusing
ステートメントを関数に追加し、NuGetパッケージで定義された型を使用できますあなたが参照しました。
Azure FunctionsはApp Servicesの上に構築されているため、上記の手順の代替手段として、標準のAzure Webアプリ(Azure Webサイト)で利用可能なすべての優れた展開オプションにもアクセスできます。
ここではいくつかの例を示します。
App Service Editor(Monaco)を使用して、ブラウザーから直接ファイルを管理するには:
Function app settings
をクリックしますGo to App Service Settings
をクリックしますTools
ボタンをクリックしますOn
にし、Go
をクリックしますproject.json
ファイルを関数のフォルダー(関数の名前が付けられたフォルダー)にドラッグアンドドロップします。https://<function_app_name>.scm.azurewebsites.net
D:\home\site\wwwroot\<function_name>
に移動しますProject.json
ファイルをフォルダー(ファイルグリッド)にドラッグアンドドロップします。(上記の指示に従って)接続したら、Project.json
ファイルを/site/wwwroot/<function_name>
にコピーします
追加の展開オプションについては、以下を参照してください: https://Azure.Microsoft.com/en-us/documentation/articles/web-sites-deploy/
Function Appが実行されていないときに継続的な統合を有効にし、project.json
ファイルを使用して関数を展開すると、Function Appが初期化されるとパッケージの復元が自動的に行われます。 project.lock.json
ファイルをソース管理に追加することはお勧めしません。
関数は、プリコンパイル済みアセンブリとして展開することもできます。この場合、すべての依存関係管理はVisual Studioで処理されます。このオプションは、Visual Studioのすべてのバージョンで標準クラスライブラリとして、または Visual Studio 2017 Azure Functions Tools を使用して使用できます。
このスレッドは私を大いに助けてくれました-しかし、私はProject.jsonを動作させるために数時間を無駄にしました-無駄に。
バージョン2.xでAzure関数を作成する場合、別の方法でこれを行う必要があります。
前述のように新しいファイルを作成しますが、名前はfunction.projです。このファイルには、Nugetを介してライブラリをインポートするためのXML構造が含まれています。
これは、.Net用Amazon S3 SDKをインポートする私の例です。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AWSSDK.S3" Version="3.3.26.3"/>
<PackageReference Include="AWSSDK.Core" Version="3.3.29.1"/>
</ItemGroup>
</Project>
これを保存すると、パッケージがインストールされていることを示すコンソールの更新が表示されます。これは実際に十分に文書化されておらず、これを見つけるのに数時間かかりました。だから、これが誰かを助けることを願っています。
Azure FunctionsでNugetパッケージを使用できます。最も簡単な方法は、Azure FunctionsのテンプレートがあるVisual Studio 2017 15.4を使用することです。以下の手順に従ってください
1)Azure関数プロジェクトの追加:ソリューションを右クリックして、[新しいプロジェクトの追加]を選択します。 CLOUDオプションに移動すると、「Azure Function」プロジェクトが見つかります。
2)Nugetパッケージを追加するのは素晴らしいことです。 「依存関係」を展開し、右クリックして「Nugetパッケージの管理」オプションを選択します。 Nuget Packageダイアログが表示されますので、インストールしたいNugetパッケージを選択してください。下のスクリーンショットをご覧ください
3)Azure関数を公開すると、Visual Studioがすべての設定などを処理します。
この方法は、Visual Studio 2017 15.4以降を使用している場合にのみ機能します。そうでない場合は、他の人が説明した他の方法に従う必要があります。
NuGetのどこかに保存されている外部ライブラリであるSFTPクライアントを使用したいとします。
これを達成するには、最新のAzure Functions仕様に従って、以下を実行します。
Azure Function内のファイルセクションを開き、function.proj
という新しいファイルを追加します。
詳細については、Microsoft ドキュメント を参照してください。
そのfunction.proj
の中に、XML構造(Visual Studioでローカルプロジェクトを作成してNuGetパッケージをインストールする場合に*.csproj
ファイル内で見つけることができる同じ種類の構造)を使用してNugetパッケージ参照を配置します。
ここで重要なことは、ライブラリに完全なパスを提供することです。たとえば、次のように表示されます:"D:\home\site\wwwroot\bin\your_custom_library.dll"
最後に、[ログ]セクションを開き、コードを保存します。しばらくすると、NuGetパッケージの復元ログが表示されます。
注:これらのログは、function.proj
ファイルの保存時またはプロジェクトの実行時にも表示される場合があります。
ライブラリがまだ不明と表示される場合は、Visual StudioからAzure Cloud Explorerを使用して、手動でライブラリをbinフォルダーに追加してみてください。
Visual Studio 2017の新しい.csproj形式もサポートされていることに注意してください。プロジェクトをASPNET Webプロジェクトとして作成する場合、Azure Functionsランタイムは、プロジェクトをビルドする前に必要なすべてのnugetパッケージをダウンロードします。