Come posso usare i pacchetti NuGet nelle mie funzioni di Azure?


112

Utilizzando Funzioni di Azure , posso fare riferimento e usare i pacchetti NuGet nella mia funzione C #?


Ho dovuto aggiornare manualmente il mio file project.json per riavviare il servizio di funzione .. poi ha ripristinato i miei pacchetti nuget. Qualcuno conosce un modo migliore per riavviare il servizio per far sì che ripristini i pacchetti? Kudu non ha aiutato
Erik Bergstedt

1
È possibile usare l'opzione di ripristino del sito standard nelle impostazioni dell'app per le funzioni. Ma tieni presente che, quando una funzione viene eseguita per la prima volta, se il file project.json contiene un set di riferimenti diverso da quello precedentemente ripristinato, in quel momento verrà eseguita automaticamente un'operazione di ripristino.
Fabio Cavalcante

Risposte:


141

Sì! Sebbene il portale di Funzioni di Azure non fornisca attualmente un meccanismo per aggiungere e gestire i pacchetti NuGet, il runtime supporta i riferimenti NuGet e si assicurerà che vengano usati correttamente durante la compilazione e l'esecuzione delle funzioni.

Per definire le dipendenze, è necessario creare un Project.jsonfile con i riferimenti al pacchetto NuGet richiesti. Ecco un esempio che aggiunge un riferimento alla Microsoft.ProjectOxford.Faceversione 1.1.0:

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

Il portale di Funzioni di Azure fornisce un modo conveniente per gestire i file di funzione, che possiamo usare per creare (o caricare) il nostro project.json:

  1. Nella sezione di sviluppo della funzione , fare clic su Visualizza file
  2. Fai clic sull'opzione per creare un file (puoi anche fare clic sull'opzione per caricare un file se hai un project.jsonfile creato in precedenza sulla tua macchina
  3. Assegnare un nome al file project.jsone definire i riferimenti del pacchetto (è possibile utilizzare l'esempio sopra come modello).

Il processo di ripristino del pacchetto inizierà e dovresti vedere un output simile al seguente nella finestra di registro:

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.

Come previsto, il runtime di Funzioni di Azure aggiungerà automaticamente i riferimenti agli assembly del pacchetto, quindi NON è necessario aggiungere esplicitamente riferimenti agli assembly utilizzando #r "AssemblyName", è sufficiente aggiungere le usingistruzioni richieste alla funzione e utilizzare i tipi definiti nel pacchetto NuGet che si ' ho fatto riferimento.

Opzioni di distribuzione aggiuntive

Poiché Funzioni di Azure si basa sui servizi app, in alternativa ai passaggi precedenti, hai anche accesso a tutte le ottime opzioni di distribuzione disponibili per le app Web di Azure standard (siti Web di Azure).

Ecco alcuni esempi:

Utilizzo dell'editor del servizio app (Monaco)

Per gestire i file direttamente dal browser utilizzando l'Editor del servizio app (Monaco):

  • Nel portale di Funzioni di Azure fare clic su Function app settings
  • Nella sezione Impostazioni avanzate , fare clic suGo to App Service Settings
  • Fare clic sul Toolspulsante
  • In Sviluppo fare clic su Editor del servizio app
  • Giralo Onse non è già abilitato e clicca suGo
  • Una volta caricato, trascina il project.jsonfile nella cartella della funzione (la cartella che prende il nome dal file function.

Utilizzo dell'endpoint SCM (Kudu)

  • Navigare verso: https://<function_app_name>.scm.azurewebsites.net
  • Fare clic su Console di debug> CMD
  • Navigare verso D:\home\site\wwwroot\<function_name>
  • Trascina il Project.jsonfile nella cartella (sulla griglia dei file)

FTP

Integrazione continua

Se si abilita l'integrazione continua e si distribuisce la funzione con un project.jsonfile quando l'app per le funzioni non è in esecuzione, il ripristino del pacchetto avverrà automaticamente una volta inizializzata l'app per le funzioni. Si consiglia di non aggiungere il project.lock.jsonfile al controllo del codice sorgente.

Assiemi precompilati

Le funzioni possono anche essere distribuite come assembly precompilati e, in questo caso, tutta la gestione delle dipendenze viene gestita in Visual Studio. Questa opzione può essere usata come librerie di classi standard su qualsiasi versione di Visual Studio o utilizzando gli strumenti di Funzioni di Azure di Visual Studio 2017 .


1
Qual è il function script roottuo ultimo paragrafo? Capisco che sia dove project.jsonsi trova. È corretto?
justinyoo

2
@JustInChronicles, questa è in realtà una cartella superiore a quella. Si project.jsontrova nella cartella delle funzioni, che è una cartella figlia della radice dello script. La radice dello script viene mappata alla wwwrootcartella in Azure.
Fabio Cavalcante

Grazie per il chiarimento!
justinyoo

@FabioCavalcante, adoro il pacchetto nuget che metti nell'esempio, tante cose fantastiche con servizi cognitivi azzurri !!!
Thomas

Si noti che "Visual Studio Online" menzionato nella risposta stackoverflow sopra stackoverflow.com/a/36411537/5288052 è disponibile dagli strumenti di Azure come "App Service Editor" (vedere stackoverflow.com/a/38173438/5288052 )
Stefano Spinucci

35

Questo thread mi ha aiutato molto, ma ho comunque sprecato qualche ora cercando di far funzionare Project.json senza alcun risultato.

Se crei una funzione di Azure nella versione 2.x, devi farlo in un modo diverso.

Crea un nuovo file come indicato ma chiamalo function.proj . Questo file ha una struttura XML per l'importazione di librerie tramite Nuget.

Ecco il mio esempio di importazione dell'SDK Amazon S3 per .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>

dopo averlo salvato, dovresti vedere l'aggiornamento della console che indica che i pacchetti vengono installati. Questo in realtà non è ben documentato e mi ci sono volute alcune ore per scoprirlo. Quindi spero che questo aiuti qualcuno.


2
Questo è stato di grande aiuto, grazie per la pubblicazione. Ecco un link con maggiori informazioni.

1
Come te, ho passato ore a fare lo stesso. Che funzioni. Molte grazie. Amo stackoverflow!
karrtojal

13

Puoi usare i pacchetti Nuget in Funzioni di Azure. Il modo più semplice sarà usare Visual Studio 2017 15.4 dove è disponibile un modello per Funzioni di Azure. Segui i passaggi seguenti

1) Aggiungi progetto funzione Azure: fare clic con il tasto destro sulla soluzione e selezionare Aggiungi nuovo progetto. Vai all'opzione CLOUD lì troverai il progetto "Funzione Azure".

Funzione Azure

2) Ora è carino aggiungere qualsiasi pacchetto Nuget. Espandi "DIPENDENZE" e fai clic destro su di esso per selezionare l'opzione "Gestisci pacchetti Nuget". Apparirà la finestra di dialogo Pacchetto Nuget, selezionare qualsiasi pacchetto Nuget che si desidera installare. Vedi screenshot qui sotto

3) Ora pubblica la tua funzione Azure, Visual Studio si occuperà di tutte le impostazioni, ecc.

Questo metodo funzionerà solo se utilizzi Visual Studio 2017 15.4 o successivo, in caso contrario dovrai seguire altri modi come spiegato da altri.


1
Questo è il flusso standard per VS / librerie di classi (che è ciò che è il progetto Funzioni di Azure) e non specifico per Funzioni di Azure. Gli unici passaggi specifici per Funzioni di Azure sono quelli documentati di seguito. Aggiungerò una nota alla mia risposta originale, inclusi i dettagli per la procedura aggiornata nella 2.0.
Fabio Cavalcante

7

Supponiamo di voler utilizzare il SFTPclient, che è una libreria esterna, archiviata da qualche parte in NuGet.

A tale scopo, in base alla più recente specifica di Funzioni di Azure , eseguire le operazioni seguenti:

  1. Apri la sezione dei file all'interno della funzione di Azure e aggiungi un nuovo file chiamato function.proj.

    inserisci qui la descrizione dell'immagine Per ulteriori informazioni, fare riferimento alla documentazione Microsoft .


  1. Al suo interno function.projmetti il Nugetriferimento al pacchetto usando la XMLstruttura (lo stesso tipo di struttura che puoi trovare all'interno del *.csprojfile se crei un progetto locale con Visual Studio e installi qualche NuGetpacchetto in esso).

    inserisci qui la descrizione dell'immagine


  1. Successivamente, includiamo il riferimento della libreria al progetto: inserisci qui la descrizione dell'immagine

    Ciò che è essenziale qui è che dovresti fornire un percorso completo alla libreria, come nell'esempio che puoi vedere è: "D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. Quindi prova un codice specifico della libreria: inserisci qui la descrizione dell'immagine

  1. Infine, apri la sezione Log e salva il codice. Dopo un po 'di tempo dovresti vedere i NuGetpacchetti che ripristinano il registro. inserisci qui la descrizione dell'immagine

    Nota: questi log potrebbero apparire anche durante il salvataggio del function.projfile o durante l'esecuzione del progetto.


Nel caso in cui la libreria appaia ancora come sconosciuta, provare ad aggiungerla Dllmanualmente nella cartella bin utilizzando Azure Cloud Explorer da Visual Studio .

inserisci qui la descrizione dell'immagine


Qualcosa è cambiato da questa risposta? Questo sembra non funzionare più. Viene visualizzato un "Errore del servizio di compilazione": "Functions.TimerTrigger2" eseguito (non riuscito, Id = a318d5b7-a02c-4ba0-bb04-037beda89b1c) Impossibile trovare il file "D: \ home \ site \ wwwroot \ bin \ Google.Apis .Sheets.v4.dll'.
utente

Quando si installa uno script tramite function.proj, la posizione per dllviene visualizzata nella sezione Log dopo un certo periodo di tempo. A volte è necessario ricaricare nuovamente la pagina per la funzione Azure, a volte premere il pulsante "Esegui" per visualizzare l'installazione dei pacchetti NuGet e anche la posizione. Controlla cosa viene stampato nella sezione Log come posizione e prova a inserirlo.
Arsen Khachaturyan

2

Tieni presente che è supportato anche il nuovo formato .csproj in Visual Studio 2017. Se crei il tuo progetto come progetto Web ASPNET, il runtime di Funzioni di Azure scarica tutti i pacchetti nuget necessari prima di creare il tuo progetto.


Per il progetto Web ASP.NET, anche VS 2015 funziona. Per gli strumenti di Funzioni di Azure, questo è solo VS 2017. La differenza fondamentale è che stai distribuendo bit precompilati (e dipendenze), quindi il runtime non gestisce il ripristino per te, ma sì, questo è davvero un modo più nuovo di scrivere funzioni e gestire le dipendenze. Aggiornerò la risposta per riflettere le ultime funzionalità.
Fabio Cavalcante
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.