Azure FunctionsでNuGetパッケージを使用するにはどうすればよいですか?


112

使用Azureの機能を、私は参照し、私のC#関数にNuGetパッケージを使用することができますか?


関数サービスを再起動するには、project.jsonファイルを手動で更新する必要がありました。その後、nugetパッケージを復元しました。パッケージを復元するためにサービスを再起動するより良い方法を誰かが知っていますか?クドゥは助けになりませんでした
エリックベルクシュテット2017年

1
関数アプリの設定で標準のサイト復元オプションを使用できます。ただし、関数が最初に実行されたときに、project.jsonファイルに以前に復元されたものとは異なる参照のセットが含まれている場合、その時点で復元操作が自動的に行われることに注意してください。
Fabio Cavalcante 2017年

回答:


141

はい!Azure Functionsポータルは現在、NuGetパッケージを追加および管理するメカニズムを提供していませんが、ランタイムはNuGet参照をサポートしており、関数のコンパイルおよび実行時にそれらが正しく使用されることを確認します。

依存関係を定義するにProject.jsonは、必要なNuGetパッケージ参照を含むファイルを作成する必要があります。Microsoft.ProjectOxford.Faceバージョン1.1.0 への参照を追加する例を次に示します。

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.ProjectOxford.Face": "1.1.0"
      }
    }
   }
}

Azure Functionsポータルは、関数ファイルを管理する便利な方法を提供します。これを使用して、次のものを作成(またはアップロード)できますproject.json

  1. 関数の開発セクションで、ファイルの表示をクリックします
  2. オプションをクリックしてファイルを作成します(project.jsonマシンに以前に作成したファイルがある場合は、オプションをクリックしてファイルをアップロードすることもできます
  3. ファイルに名前を付け、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パッケージで定義されている型を使用するだけです。 veを参照。

追加の導入オプション

Azure FunctionsはApp Servicesの上に構築されているため、上記の手順の代わりに、標準のAzure Webアプリ(Azure Webサイト)で利用できるすべての優れた展開オプションにアクセスできます。

ここではいくつかの例を示します。

App Service Editor(モナコ)の使用

App Serviceエディター(モナコ)を使用してブラウザーから直接ファイルを管理するには:

  • Azure Functionsポータルで、 Function app settings
  • 以下の下で[詳細設定]セクションで、上をクリックGo to App Service Settings
  • クリックしてTools、ボタン
  • 以下の下で開発、上のクリック App Service Editorを
  • 回して On、それはまだ有効になっていない場合とでクリックGo
  • 読み込まproject.jsonれたら、ファイルを関数のフォルダー(関数にちなんで名付けられたフォルダー)にドラッグアンドドロップします。

SCM(Kudu)エンドポイントの使用

  • 案内する: https://<function_app_name>.scm.azurewebsites.net
  • Debug Console> CMDをクリックします
  • 案内する D:\home\site\wwwroot\<function_name>
  • Project.jsonファイルをフォルダー(ファイルグリッド上)にドラッグアンドドロップします。

FTP

継続的インテグレーション

project.jsonFunction Appが実行されていないときに継続的インテグレーションを有効にして関数をファイルにデプロイすると、Function Appが初期化されるとパッケージの復元が自動的に行われます。ファイルをソース管理に追加しないことをお勧めしますproject.lock.json

コンパイル済みのアセンブリ

関数は、コンパイル済みのアセンブリとして展開することもできます。この場合、すべての依存関係管理はVisual Studioで処理されます。このオプションは、Visual Studioの任意のバージョンで標準クラスライブラリとして、またはVisual Studio 2017 Azure関数ツールを使用して使用できます


1
とは function script root最後の段落ですか?私はそれがどこにあるのか理解していproject.jsonます。あれは正しいですか?
justinyoo

2
@JustInChronicles、それは実際にはその1つ上のフォルダーです。project.jsonスクリプトルートの子フォルダであるあなたの機能フォルダ、です。スクリプトルートはwwwroot、Azureのフォルダーにマップされます。
Fabio Cavalcante 2016

説明をありがとう!
justinyoo

@FabioCavalcante、あなたが例に入れたnugetパッケージが大好きです、紺碧認知サービスでたくさんの驚くべきことが!!!
トーマス

上記のstackoverflow.com/a/36411537/5288052のstackoverflowの回答に記載されている「Visual Studio Online」は、Azureツールから「App Service Editor」として利用できます(stackoverflow.com/a/38173438/5288052を参照)
Stefano Spinucci

35

このスレッドは私に大いに役立ちました-しかし、Project.jsonを機能させるために数時間を無駄にしました-役に立たなかった。

バージョン2.xでAzure関数を作成する場合は、別の方法でこれを行う必要があります。

上記のように新しいファイルを作成しますが、function.projという名前を付けます。このファイルには、Nugetを介してライブラリをインポートするためのXML構造があります。

これが、Amazon S3 SDK for .Netをインポートする私の例です。

<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>

これを保存すると、パッケージがインストールされていることを示すコンソールの更新が表示されます。これは実際には十分に文書化されておらず、これを見つけるのにかなりの時間がかかりました。だから私はこれが誰かを助けることを願っています。


2
投稿していただきありがとうございます。詳細はこちらをご覧ください。

1
あなたのように、私は同じことをするのに何時間も費やしました。うまくいきます。どうもありがとう。Stackoverflowが大好きです。
karrtojal

13

Azure FunctionsでNugetパッケージを使用できます。最も簡単な方法は、Azure FunctionsのテンプレートがあるVisual Studio 2017 15.4を使用することです。以下の手順に従ってください

1)Azure関数プロジェクトの追加:ソリューションを右クリックして、[新しいプロジェクトの追加]を選択します。「Azure Function」プロジェクトがあるCLOUDオプションに移動します。

Azure関数

2)これで、Nugetパッケージを追加することができます。"DEPENDENCIES"を展開して右クリックし、オプション "Manage Nuget Packages"を選択します。Nugetパッケージダイアログが表示されたら、インストールするNugetパッケージを選択します。下のスクリーンショットを参照してください

3)Azure関数を公開すると、Visual Studioがすべての設定などを処理します。

この方法は、Visual Studio 2017 15.4以降を使用する場合にのみ機能します。使用しない場合は、他の方法で説明されている他の方法に従う必要があります。


1
これはVS /クラスライブラリ(Azure Functionsプロジェクトとは何か)の標準フローであり、Azure Functionsに固有のものではありません。Azure Functionsに固有の手順は、以下に記載されている手順のみです。2.0で更新された手順の詳細を含めて、元の回答にメモを追加します。
Fabio Cavalcante 2017年

7

SFTPどこかに保存されている外部ライブラリであるクライアントを使用したいとしますNuGet

これを行うには、最新のAzure Functions仕様に従って、以下を実行します。

  1. Azure関数内のファイルセクションを開き、という新しいファイルを追加しますfunction.proj

    ここに画像の説明を入力してください 詳細については、Microsoftのドキュメントを参照してください。


  1. その中に、構造を使用しfunction.projNugetパッケージ参照を配置しますXMLVisual Studioで*.csprojローカルプロジェクトを作成し、そこにパッケージをインストールする場合、ファイル内にあるのと同じ種類の構造)。NuGet

    ここに画像の説明を入力してください


  1. 次に、プロジェクトへのライブラリ参照を含めましょう: ここに画像の説明を入力してください

    ここで重要なのは、ライブラリの完全なパスを指定する必要があることです。たとえば、次のように表示されます。 "D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. 次に、いくつかのライブラリ固有のコードをテストします。 ここに画像の説明を入力してください

  1. 最後に、[ログ]セクションを開いてコードを保存します。しばらくすると、NuGetパッケージ復元ログが表示されます。 ここに画像の説明を入力してください

    注:これらのログは、function.projファイルの保存時またはプロジェクトの実行時にも表示される可能性があります。


それでもライブラリが不明と表示される場合は、Visual StudioからAzure Cloud ExplorerDllを使用して手動でbinフォルダーに追加してください。

ここに画像の説明を入力してください


この回答から何か変更はありますか?これはもう機能しないようです。「コンパイルサービスエラー」が表示されます-実行された 'Functions.TimerTrigger2'(失敗、Id = a318d5b7-a02c-4ba0-bb04-037beda89b1c)ファイル 'D:\ home \ site \ wwwroot \ bin \ Google.Apisが見つかりませんでした.Sheets.v4.dll '。
ユーザー

を介してスクリプトをインストールする場合、しばらくするとfunction.proj、の場所dllが[ログ]セクションに表示されます。Azure Functionのページをもう一度再読み込みする必要がある場合や、[実行]ボタンをクリックして、NuGetパッケージのインストールと場所を確認する場合があります。ログセクションで何が印刷されているかを場所として確認し、それを配置してみてください。
Arsen Khachaturyan

2

Visual Studio 2017の新しい.csproj形式もサポートされていることに注意してください。プロジェクトをASPNET Webプロジェクトとして作成する場合、Azure Functionsランタイムは、プロジェクトをビルドする前に必要なすべてのnugetパッケージをダウンロードします。


ASP.NET Webプロジェクトの場合、VS 2015も機能します。Azure Functions Toolsの場合、それはVS 2017のみです。主な違いは、コンパイル済みのビット(および依存関係)を展開しているため、ランタイムが復元を処理しないことですが、そうです。これは、実際に、関数を記述して依存関係を管理する新しい方法です。回答を更新して、最新の機能を反映させます。
Fabio Cavalcante 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.