Comment puis-je utiliser des packages NuGet dans mes fonctions Azure?

112

À l'aide d' Azure Functions , puis-je référencer et utiliser des packages NuGet dans ma fonction C #?

Fabio Cavalcante
la source
J'ai dû mettre à jour mon fichier project.json manuellement afin de redémarrer le service de fonction .. puis il a restauré mes paquets nuget. Quelqu'un connaît-il un meilleur moyen de redémarrer le service pour le faire restaurer les packages? Kudu n'a pas aidé
Erik Bergstedt
1
Vous pouvez utiliser l'option de restauration de site standard dans les paramètres de l'application de fonction. Mais gardez à l'esprit que, lorsqu'une fonction est exécutée pour la première fois, si le fichier project.json contient un ensemble de références qui diffère de ce qui a été précédemment restauré, une opération de restauration se produira à ce moment-là, automatiquement.
Fabio Cavalcante

Réponses:

141

Oui! Bien que le portail Azure Functions ne fournisse actuellement pas de mécanisme pour ajouter et gérer des packages NuGet, le runtime prend en charge les références NuGet et s'assurera qu'elles sont correctement utilisées lors de la compilation et de l'exécution de vos fonctions.

Pour définir vos dépendances, vous devez créer un Project.jsonfichier avec les références de package NuGet requises. Voici un exemple qui ajoute une référence à la Microsoft.ProjectOxford.Faceversion 1.1.0:

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

Le portail Azure Functions offre un moyen pratique de gérer vos fichiers de fonctions, que nous pouvons utiliser pour créer (ou télécharger) notre project.json:

  1. Dans la section de développement de la fonction , cliquez sur afficher les fichiers
  2. Cliquez sur l'option pour créer un fichier (vous pouvez également cliquer sur l'option pour télécharger un fichier si vous avez un project.jsonfichier précédemment créé sur votre machine
  3. Nommez le fichier project.jsonet définissez vos références de package (vous pouvez utiliser l'exemple ci-dessus comme modèle).

Le processus de restauration du package commencera et vous devriez voir une sortie similaire à la suivante dans votre fenêtre de journal:

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.

Comme prévu, le runtime Azure Functions ajoutera automatiquement les références aux assemblys de package, vous n'avez donc PAS besoin d'ajouter explicitement des références d'assembly à l'aide #r "AssemblyName", vous pouvez simplement ajouter les usinginstructions requises à votre fonction et utiliser les types définis dans le package NuGet que vous j'ai référencé.

Options de déploiement supplémentaires

Étant donné qu'Azure Functions repose sur App Services, au lieu des étapes ci-dessus, vous avez également accès à toutes les excellentes options de déploiement disponibles pour les applications Web Azure standard (sites Web Azure).

Voici quelques exemples:

Utilisation de l'éditeur App Service (Monaco)

Pour gérer vos fichiers directement depuis votre navigateur en utilisant l'éditeur App Service (Monaco):

  • Sur le portail Azure Functions, cliquez sur Function app settings
  • Dans la section Paramètres avancés , cliquez surGo to App Service Settings
  • Cliquez sur le Toolsbouton
  • Sous Développer , cliquez sur Éditeur App Service
  • Tournez-le Ons'il n'est pas déjà activé et cliquez surGo
  • Une fois qu'il est chargé, faites glisser et déposez votre project.jsonfichier dans le dossier de votre fonction (le dossier nommé d'après votre fonction.

Utilisation du point de terminaison SCM (Kudu)

  • Aller vers: https://<function_app_name>.scm.azurewebsites.net
  • Cliquez sur Debug Console> CMD
  • Aller vers D:\home\site\wwwroot\<function_name>
  • Glissez-déposez votre Project.jsonfichier dans le dossier (sur la grille de fichiers)

FTP

Intégration continue

Si vous activez l'intégration continue et déployez votre fonction avec un project.jsonfichier lorsque votre application de fonction n'est pas en cours d'exécution, la restauration du package se produira automatiquement une fois votre application de fonction initialisée. Il est recommandé de ne pas ajouter votre project.lock.jsonfichier au contrôle de code source.

Assemblys pré-compilés

Les fonctions peuvent également être déployées en tant qu'assemblys précompilés, et dans ce cas, toute la gestion des dépendances est gérée dans Visual Studio. Cette option peut être utilisée comme bibliothèques de classes standard sur n'importe quelle version de Visual Studio ou à l'aide des outils Azure Functions de Visual Studio 2017 .

Fabio Cavalcante
la source
1
Qu'y a-t-il function script rootdans votre dernier paragraphe? Je comprends que c'est là que project.jsonse trouve. Est-ce exact?
justinyoo
2
@JustInChronicles, c'est en fait un dossier à partir de cela. Le se project.jsontrouve dans votre dossier de fonctions, qui est un dossier enfant de la racine du script. La racine du script correspond à votre wwwrootdossier dans Azure.
Fabio Cavalcante
Merci pour la clarification!
justinyoo
@FabioCavalcante, J'adore le paquet nuget que vous avez mis en exemple, tant de choses incroyables avec les services cognitifs azur !!!
Thomas
Veuillez noter que `` Visual Studio Online '' mentionné dans la réponse stackoverflow ci-dessus stackoverflow.com/a/36411537/5288052 est disponible à partir des outils Azure en tant que `` App Service Editor '' (voir stackoverflow.com/a/38173438/5288052 )
Stefano Spinucci
35

Ce fil de discussion m'a beaucoup aidé - mais j'ai quand même perdu quelques heures à essayer de faire fonctionner Project.json - en vain.

Si vous créez une fonction Azure dans la version 2.x, vous devez le faire d'une manière différente.

Créez un nouveau fichier comme indiqué, mais nommez-le function.proj . Ce fichier a une structure XML pour importer des bibliothèques via Nuget.

Voici mon exemple d'importation du SDK Amazon S3 pour .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>

lors de l'enregistrement, vous devriez voir la mise à jour de la console indiquant que les packages sont en cours d'installation. Ce n'est vraiment pas bien documenté et il m'a fallu quelques bonnes heures pour le découvrir. J'espère donc que cela aide quelqu'un.

James Cooke
la source
2
Cela a été d'une grande aide, merci pour la publication. Voici un lien avec plus d'informations.
1
Comme vous, j'ai passé des heures à faire de même. Ça marche. Merci beaucoup. J'adore stackoverflow!
karrtojal
13

Vous pouvez utiliser des packages Nuget dans vos fonctions Azure. Le moyen le plus simple sera d'utiliser Visual Studio 2017 15.4 où il existe un modèle pour Azure Functions. Suivez les étapes ci-dessous

1) Ajouter un projet de fonction Azure: cliquez avec le bouton droit sur la solution et sélectionnez Ajouter un nouveau projet. Allez dans l'option CLOUD, vous y trouverez le projet "Azure Function".

Fonction Azure

2) Maintenant, c'est joli d'ajouter n'importe quel paquet Nuget. Développez "DÉPENDANCES" et faites un clic droit dessus pour sélectionner l'option "Gérer les packages Nuget". La boîte de dialogue Nuget Package apparaîtra, sélectionnez n'importe quel package Nuget que vous souhaitez installer. Voir la capture d'écran ci-dessous

3) Maintenant, publiez votre fonction Azure, Visual Studio s'occupera de tous les paramètres, etc.

Cette méthode ne fonctionnera que si vous utilisez Visual Studio 2017 15.4 ou supérieur, sinon vous devrez suivre d'autres méthodes, comme expliqué par d'autres.

Sujit Singh
la source
1
Il s'agit du flux standard pour les bibliothèques VS / Class (ce qu'est le projet Azure Functions) et non spécifique à Azure Functions. Les seules étapes spécifiques à Azure Functions sont celles décrites ci-dessous. J'ajouterai une note à ma réponse originale, y compris les détails de la procédure mise à jour dans 2.0.
Fabio Cavalcante
7

Supposons que nous voulions utiliser le SFTPclient, qui est une bibliothèque externe, stockée quelque part dansNuGet .

Pour ce faire, conformément à la dernière spécification Azure Functions , procédez comme suit:

  1. Ouvrez la section des fichiers dans votre fonction Azure et ajoutez un nouveau fichier appelé function.proj.

    entrez la description de l'image ici Pour plus d'informations, reportez-vous à la documentation Microsoft .


  1. À l'intérieur, function.projplacez la Nugetréférence du package en utilisant la XMLstructure (le même type de structure que vous pouvez trouver à l'intérieur du *.csprojfichier si vous créez un projet local avec Visual Studio et y installez un NuGetpackage).

    entrez la description de l'image ici


  1. Ensuite, incluons la référence de bibliothèque au projet: entrez la description de l'image ici

    Ce qui est essentiel ici, c'est que vous devez fournir un chemin complet vers la bibliothèque, comme dans l'exemple que vous pouvez voir: "D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. Ensuite, testez du code spécifique à la bibliothèque: entrez la description de l'image ici

  1. Enfin, ouvrez la section Journaux et enregistrez le code. Après un certain temps, vous devriez voir le NuGetjournal de restauration des packages. entrez la description de l'image ici

    Remarque: ces journaux peuvent également apparaître lors de l'enregistrement du function.projfichier ou lors de l'exécution du projet.


Si la bibliothèque apparaît toujours comme inconnue, essayez de l'ajouter Dllmanuellement dans le dossier bin à l'aide de l' explorateur Azure Cloud à partir de Visual Studio .

entrez la description de l'image ici

Arsen Khachaturyan
la source
Quelque chose a-t-il changé depuis cette réponse? Cela ne semble plus fonctionner. Je vois une "Erreur du service de compilation" - Exécution de 'Functions.TimerTrigger2' (Échec, Id = a318d5b7-a02c-4ba0-bb04-037beda89b1c) Impossible de trouver le fichier 'D: \ home \ site \ wwwroot \ bin \ Google.Apis .Sheets.v4.dll ».
utilisateur du
Lorsque vous installez un script via le function.proj, l'emplacement du dllapparaît dans la section Journaux après un certain temps. Parfois, vous devez recharger la page pour la fonction Azure une fois de plus, parfois appuyez sur le bouton «Exécuter» pour voir l'installation des packages NuGet et également l'emplacement. Veuillez vérifier ce qui s'imprime dans la section Journal comme emplacement et essayez de le mettre.
Arsen Khachaturyan
2

Notez que le nouveau format .csproj dans Visual studio 2017 est également pris en charge. Si vous créez votre projet en tant que projet Web ASPNET, le runtime Azure Functions télécharge tous les packages nuget nécessaires avant de générer votre projet.

résolutionJ
la source
Pour le projet Web ASP.NET, VS 2015 fonctionne également. Pour les outils Azure Functions, c'est VS 2017 uniquement. La principale différence est que vous déployez des bits (et des dépendances) pré-compilés, de sorte que le runtime ne gère pas la restauration pour vous, mais oui, c'est en effet une nouvelle façon d'écrire des fonctions et de gérer les dépendances. Je mettrai à jour la réponse pour refléter les dernières fonctionnalités.
Fabio Cavalcante