Bagaimana saya bisa menggunakan paket NuGet di Azure Functions saya?

112

Menggunakan Azure Functions , dapatkah saya mereferensikan dan menggunakan paket NuGet dalam fungsi C # saya?

Fabio Cavalcante
sumber
Saya harus memperbarui file project.json saya secara manual untuk memulai ulang layanan fungsi .. kemudian mengembalikan paket nuget saya. Adakah yang tahu cara yang lebih baik untuk memulai ulang layanan untuk membuatnya memulihkan paket? Kudu tidak membantu
Erik Bergstedt
1
Anda dapat menggunakan opsi pemulihan situs standar di pengaturan aplikasi fungsi. Namun perlu diingat bahwa, saat sebuah fungsi dijalankan pertama kali, jika file project.json berisi sekumpulan referensi yang berbeda dari yang sebelumnya dipulihkan, operasi pemulihan akan terjadi pada saat itu, secara otomatis.
Fabio Cavalcante

Jawaban:

141

Iya! Meskipun portal Azure Functions saat ini tidak menyediakan mekanisme untuk menambah dan mengelola paket NuGet, runtime mendukung referensi NuGet dan akan memastikannya digunakan dengan benar saat menyusun dan menjalankan fungsi Anda.

Untuk menentukan dependensi Anda, Anda perlu membuat Project.jsonfile dengan referensi paket NuGet yang diperlukan. Berikut adalah contoh yang menambahkan referensi ke Microsoft.ProjectOxford.Faceversi 1.1.0:

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

Portal Azure Functions menyediakan cara mudah untuk mengelola file fungsi Anda, yang dapat kami gunakan untuk membuat (atau mengunggah) project.json:

  1. Di bagian pengembangan fungsi , klik lihat file
  2. Klik pada opsi untuk membuat file (Anda juga dapat mengklik opsi untuk mengunggah file jika Anda memiliki project.jsonfile yang dibuat sebelumnya di mesin Anda
  3. Beri nama file project.jsondan tentukan referensi paket Anda (Anda dapat menggunakan contoh di atas sebagai template).

Proses pemulihan paket akan dimulai dan Anda akan melihat keluaran yang mirip dengan berikut ini di jendela log Anda:

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.

Seperti yang diharapkan, runtime Azure Functions akan secara otomatis menambahkan referensi ke rakitan paket, jadi Anda TIDAK perlu menambahkan referensi assembly secara eksplisit #r "AssemblyName", Anda cukup menambahkan usingpernyataan yang diperlukan ke fungsi Anda dan menggunakan tipe yang ditentukan dalam paket NuGet Anda ' telah direferensikan.

Opsi penerapan tambahan

Karena Azure Functions dibangun di atas Layanan Aplikasi, sebagai alternatif dari langkah-langkah di atas, Anda juga memiliki akses ke semua opsi penerapan hebat yang tersedia untuk Aplikasi Web Azure standar (Situs Web Azure).

Berikut beberapa contohnya:

Menggunakan App Service Editor (Monaco)

Untuk mengelola file Anda langsung dari browser Anda dengan menggunakan App Service Editor (Monaco):

  • Di portal Azure Functions, klik Function app settings
  • Di bawah bagian Pengaturan Lanjutan , klikGo to App Service Settings
  • Klik pada Toolstombol tersebut
  • Di bawah Kembangkan , klik Editor Layanan Aplikasi
  • Hidupkan Onjika belum diaktifkan dan klikGo
  • Setelah dimuat, seret-dan-jatuhkan project.jsonfile Anda ke folder fungsi Anda (folder yang dinamai sesuai fungsi Anda.

Menggunakan titik akhir SCM (Kudu)

  • Navigasi ke: https://<function_app_name>.scm.azurewebsites.net
  • Klik Konsol Debug> CMD
  • Navigasi ke D:\home\site\wwwroot\<function_name>
  • Drag-and-drop Project.jsonfile Anda ke dalam folder (ke file grid)

FTP

Integrasi Berkelanjutan

Jika Anda mengaktifkan integrasi berkelanjutan dan menerapkan fungsi Anda dengan project.jsonfile saat Aplikasi Fungsi tidak berjalan, pemulihan paket akan terjadi secara otomatis setelah Aplikasi Fungsi Anda diinisialisasi. Anda disarankan untuk tidak menambahkan project.lock.jsonfile Anda ke kontrol sumber.

Majelis yang telah dikompilasi sebelumnya

Fungsi juga dapat digunakan sebagai rakitan pra-kompilasi, dan dalam kasus ini, semua manajemen ketergantungan ditangani di Visual Studio. Opsi ini dapat digunakan sebagai pustaka kelas standar pada setiap versi Visual Studio atau dengan menggunakan alat fungsi Azure Visual Studio 2017 .

Fabio Cavalcante
sumber
1
Apa function script rootparagraf terakhir Anda? Saya mengerti di mana project.jsonlokasinya. Apakah itu benar?
justinyoo
2
@JustInChronicles, itu sebenarnya satu folder dari itu. Ada project.jsondi folder fungsi Anda, yang merupakan folder anak dari root skrip. Root skrip memetakan ke wwwrootfolder Anda di Azure.
Fabio Cavalcante
Terimakasih atas klarifikasinya!
justinyoo
@FabioCavalcante, Suka dengan paket nuget yang Anda berikan sebagai contoh, begitu banyak hal menakjubkan dengan layanan kognitif biru !!!
Thomas
Harap dicatat bahwa 'Visual Studio Online' yang disebutkan dalam jawaban stackoverflow di atas stackoverflow.com/a/36411537/5288052 tersedia dari alat Azure sebagai 'App Service Editor' (lihat stackoverflow.com/a/38173438/5288052 )
Stefano Spinucci
35

Utas ini sangat membantu saya - tetapi saya masih menyia-nyiakan beberapa jam mencoba membuat Project.json berfungsi - tidak berhasil.

Jika Anda membuat fungsi Azure di versi 2.x, Anda perlu melakukannya dengan cara yang berbeda.

Buat file baru seperti yang dinyatakan tetapi beri nama function.proj . File ini memiliki struktur XML untuk mengimpor perpustakaan melalui Nuget.

Berikut adalah contoh saya mengimpor Amazon S3 SDK untuk .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>

setelah menyimpan ini, Anda akan melihat pembaruan konsol yang menyatakan bahwa paket sedang diinstal. Ini benar-benar tidak terdokumentasi dengan baik dan saya butuh beberapa jam untuk mengetahuinya. Jadi saya harap ini membantu seseorang.

James Cooke
sumber
2
Ini sangat membantu, terima kasih telah memposting. Ini tautan dengan info lebih lanjut.
1
Seperti Anda, saya menghabiskan waktu berjam-jam untuk melakukan hal yang sama. Itu bekerja. Terima kasih banyak. Cinta stackoverflow!
karrtojal
13

Anda dapat menggunakan paket Nuget di Azure Functions Anda. Cara termudah adalah menggunakan Visual Studio 2017 15.4 di mana terdapat templat untuk Azure Functions. Ikuti langkah-langkah di bawah ini

1) Tambahkan Proyek fungsi Azure: Klik kanan pada solusi dan pilih Tambahkan proyek baru. Pergi ke opsi CLOUD di sana Anda akan menemukan proyek "Fungsi Azure".

Fungsi Azure

2) Sekarang cukup menambahkan paket Nuget apa pun. Perluas "DEPENDENCIES" dan klik kanan di atasnya untuk memilih opsi "Kelola Paket Nuget". Dialog Paket Nuget akan muncul, pilih paket Nuget mana saja yang ingin Anda instal. Lihat gambar di bawah

3) Sekarang publikasikan fungsi Azure Anda, Visual Studio akan mengurus semua pengaturan, dll.

Metode ini hanya akan berfungsi jika Anda menggunakan Visual Studio 2017 15.4 atau lebih tinggi, jika tidak Anda harus mengikuti cara lain seperti yang dijelaskan oleh orang lain.

Sujit Singh
sumber
1
Ini adalah aliran standar untuk VS / Perpustakaan Kelas (yang merupakan proyek Azure Functions) dan tidak spesifik untuk Azure Functions. Satu-satunya langkah khusus untuk Azure Functions adalah yang didokumentasikan di bawah ini. Saya akan menambahkan catatan ke jawaban asli saya, termasuk detail untuk prosedur yang diperbarui di 2.0.
Fabio Cavalcante
7

Mari kita asumsikan kita ingin menggunakan SFTPklien, yang merupakan pustaka eksternal, disimpan di suatu tempat di NuGet.

Untuk melakukannya, sesuai dengan spesifikasi Azure Functions terbaru , lakukan hal berikut:

  1. Buka bagian file di dalam Fungsi Azure Anda dan tambahkan file baru bernama function.proj.

    masukkan deskripsi gambar di sini Untuk informasi lebih lanjut, lihat dokumentasi Microsoft .


  1. Di dalamnya function.projletakkan Nugetreferensi paket menggunakan XMLstruktur (jenis struktur yang sama dapat Anda temukan di dalam *.csprojfile jika Anda membuat proyek lokal dengan Visual Studio dan menginstal beberapa NuGetpaket ke dalamnya).

    masukkan deskripsi gambar di sini


  1. Selanjutnya, mari sertakan referensi perpustakaan ke proyek: masukkan deskripsi gambar di sini

    Yang penting di sini adalah Anda harus memberikan jalur lengkap ke perpustakaan, seperti dalam contoh yang Anda lihat: "D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. Selanjutnya uji beberapa kode khusus perpustakaan: masukkan deskripsi gambar di sini

  1. Terakhir, buka bagian Log dan simpan kodenya. Setelah beberapa waktu, Anda akan melihat NuGetpaket memulihkan log. masukkan deskripsi gambar di sini

    Catatan: log ini juga dapat muncul saat menyimpan function.projfile atau saat menjalankan proyek.


Dalam kasus jika perpustakaan masih muncul sebagai tidak diketahui coba tambahkan Dllsecara manual ke folder bin menggunakan penjelajah Azure Cloud dari Visual Studio .

masukkan deskripsi gambar di sini

Arsen Khachaturyan
sumber
Apakah ada yang berubah sejak jawaban ini? Ini sepertinya tidak berfungsi lagi. Saya melihat "Kesalahan layanan kompilasi" - 'Functions.TimerTrigger2' dijalankan (Gagal, Id = a318d5b7-a02c-4ba0-bb04-037beda89b1c) Tidak dapat menemukan file 'D: \ home \ site \ wwwroot \ bin \ Google.Apis .Sheets.v4.dll '.
pengguna
Saat Anda menginstal skrip melalui function.proj, lokasi untuk dllmuncul di bagian Log setelah beberapa waktu. Terkadang Anda perlu memuat ulang halaman untuk Fungsi Azure sekali lagi, terkadang tekan tombol "Run" untuk melihat instalasi paket NuGet dan juga lokasinya. Silakan periksa apa yang sedang dicetak di bagian Log sebagai lokasi dan coba letakkan itu.
Arsen Khachaturyan
2

Perhatikan bahwa format .csproj baru di Visual studio 2017 juga didukung. Jika Anda membuat proyek Anda sebagai Proyek Web ASPNET, runtime Fungsi Azure mengunduh semua paket nuget yang diperlukan sebelum membangun proyek Anda.

pemecahan
sumber
Untuk Proyek Web ASP.NET, VS 2015 juga berfungsi. Untuk Alat Fungsi Azure, itu hanya VS 2017. Perbedaan utamanya adalah Anda menerapkan bit yang telah dikompilasi sebelumnya (dan dependensi), sehingga runtime tidak menangani pemulihan untuk Anda, tetapi ya, itu memang cara yang lebih baru untuk menulis fungsi dan mengelola dependensi. Saya akan memperbarui jawaban untuk mencerminkan fitur terbaru.
Fabio Cavalcante