Azure İşlevlerimde NuGet paketlerini nasıl kullanabilirim?


112

Azure İşlevlerini kullanarak C # işlevimde NuGet paketlerine başvurabilir ve bunları kullanabilir miyim?


Fonksiyon servisini yeniden başlatmak için project.json dosyamı manuel olarak güncellemem gerekiyordu .. sonra nuget paketlerimi geri yükledi. Paketleri geri yüklemek için hizmeti yeniden başlatmanın daha iyi bir yolunu bilen var mı? Kudu yardım etmedi
Erik Bergstedt

1
İşlev uygulaması ayarlarında standart site geri yükleme seçeneğini kullanabilirsiniz. Ancak, bir işlev ilk çalıştırıldığında, project.json dosyası daha önce geri yüklenenden farklı bir dizi referans içeriyorsa, o sırada otomatik olarak bir geri yükleme işlemi gerçekleştirileceğini unutmayın.
Fabio Cavalcante

Yanıtlar:


141

Evet! Azure İşlevleri portalı şu anda NuGet paketlerini eklemek ve yönetmek için bir mekanizma sağlamasa da, çalışma zamanı NuGet referanslarını destekler ve işlevlerinizi derlerken ve yürütürken bunların doğru şekilde kullanılmasını sağlar.

Bağımlılıklarınızı tanımlamak için Project.json, gerekli NuGet paketi referanslarına sahip bir dosya oluşturmanız gerekir . Microsoft.ProjectOxford.Face1.1.0 sürümüne bir başvuru ekleyen bir örnek :

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

Azure İşlevleri portalı, işlev dosyalarınızı yönetmek için uygun bir yol sağlar ve bunları aşağıdakileri oluşturmak (veya yüklemek) için kullanabiliriz project.json:

  1. Fonksiyonun geliştirme bölümünde, dosyaları görüntüle'ye tıklayın
  2. Bir dosya oluşturma seçeneğine tıklayın ( project.jsonmakinenizde önceden oluşturulmuş bir dosya varsa, bir dosya yükleme seçeneğine de tıklayabilirsiniz.
  3. Dosyayı adlandırın project.jsonve paket referanslarınızı tanımlayın (yukarıdaki örneği şablon olarak kullanabilirsiniz).

Paket geri yükleme işlemi başlayacak ve günlük pencerenizde aşağıdakine benzer bir çıktı görmelisiniz:

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.

Beklendiği gibi, Azure Functions çalışma zamanı, referansları paket derlemelerine otomatik olarak ekler, bu nedenle kullanarak derleme referanslarını açıkça eklemenize gerek YOKTUR #r "AssemblyName", yalnızca gerekli usingifadeleri işlevinize ekleyebilir ve NuGet paketinde tanımlanan türleri kullanabilirsiniz. referans verdim.

Ek dağıtım seçenekleri

Azure İşlevleri, yukarıdaki adımlara alternatif olarak Uygulama Hizmetleri üzerine inşa edildiğinden, standart Azure Web Uygulamaları (Azure Web Siteleri) için sunulan tüm harika dağıtım seçeneklerine de erişebilirsiniz.

İşte bazı örnekler:

App Service Editor'ı (Monako) Kullanma

Dosyalarınızı App Service Editor (Monako) kullanarak doğrudan tarayıcınızdan yönetmek için:

  • Azure İşlevleri portalında, Function app settings
  • Gelişmiş Ayarlar bölümünün altında,Go to App Service Settings
  • Tıklayın Toolsdüğmesi
  • Develop altında , App Service Editor'a tıklayın
  • OnZaten etkinleştirilmemişse çevirin ve tıklayınGo
  • Yüklendiğinde, project.jsondosyanızı sürükleyip işlevinizin klasörüne (işlevinizin adını taşıyan klasör) bırakın.

SCM (Kudu) uç noktasını kullanma

  • Şu yöne rotayı ayarla: https://<function_app_name>.scm.azurewebsites.net
  • Hata Ayıklama Konsolu> CMD'ye tıklayın
  • Şu yöne rotayı ayarla D:\home\site\wwwroot\<function_name>
  • Project.jsonDosyanızı klasöre sürükleyip bırakın (dosya ızgarasına)

FTP

Sürekli Entegrasyon

project.jsonİşlev Uygulamanız çalışmıyorken sürekli entegrasyonu etkinleştirir ve işlevinizi bir dosya ile dağıtırsanız , İşlev Uygulamanız başlatıldığında paket geri yüklemesi otomatik olarak gerçekleşir. Tavsiye edilir yok senin eklemek project.lock.jsonkaynak kontrolü için dosyayı.

Önceden derlenmiş derlemeler

Fonksiyonlar ayrıca önceden derlenmiş derlemeler olarak dağıtılabilir ve bu durumda tüm bağımlılık yönetimi Visual Studio'da işlenir. Bu seçenek, Visual Studio'nun herhangi bir sürümünde standart sınıf kitaplıkları olarak veya Visual Studio 2017 Azure İşlev Araçları kullanılarak kullanılabilir .


1
Nedir function script rootson paragrafa? Nerede project.jsonolduğunu anlıyorum . Bu doğru mu?
justinyoo

2
@JustInChronicles, bu aslında bundan bir klasör yukarı. project.jsonSenaryo kökünün bir alt klasör sizin fonksiyon klasöründe yer almaktadır. Komut dosyası kökü wwwroot, Azure'daki klasörünüzle eşleşir.
Fabio Cavalcante

Açıklama için teşekkürler!
justinyoo

@FabioCavalcante, Örneğe koyduğunuz nuget paketini sevin, masmavi bilişsel hizmetlerle pek çok harika şey !!!
Thomas

Not Yukarıdaki stackoverflow cevapta belirtildiği 'Visual Studio Çevrimiçi' olduğunu lütfen stackoverflow.com/a/36411537/5288052 'App Servis Editör' olarak Azure araçları edinilebilir (bkz stackoverflow.com/a/38173438/5288052 )
Stefano Spinucci

35

Bu iş parçacığı bana çok yardımcı oldu - ancak yine de Project.json'u çalıştırmaya çalışırken birkaç saatimi boşa harcadım - boşuna.

2.x sürümünde bir Azure işlevi oluşturursanız, bunu farklı bir şekilde yapmanız gerekir.

Belirtildiği gibi yeni bir dosya oluşturun, ancak bunu function.proj olarak adlandırın . Bu dosya, kitaplıkları Nuget aracılığıyla içe aktarmak için bir XML yapısına sahiptir.

İşte .Net için Amazon S3 SDK'sını içe aktarma örneğim;

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

bunu kaydettikten sonra, paketlerin kurulmakta olduğunu belirten konsol güncellemesini görmelisiniz. Bu gerçekten iyi belgelenmemiş ve bunu öğrenmem birkaç saatimi aldı. Umarım bu birisine yardımcı olur.


2
Bu çok yardımcı oldu, gönderdiğiniz için teşekkürler. İşte daha fazla bilgi içeren bir bağlantı.

1
Senin gibi ben de aynısını yapmak için saatler harcadım. Bu işe yarıyor. Çok teşekkürler. Yığın taşmasını seviyorum!
karrtojal

13

Azure İşlevlerinizde Nuget paketlerini kullanabilirsiniz. En kolay yol, Azure İşlevleri için bir şablonun bulunduğu Visual Studio 2017 15.4'ü kullanmaktır. Aşağıdaki adımları izleyin

1) Azure işlevi Projesi ekleyin: Çözüme sağ tıklayın ve Yeni proje Ekle'yi seçin. CLOUD seçeneğine gidin, burada "Azure Function" projesini bulacaksınız.

Azure İşlevi

2) Artık herhangi bir Nuget paketi eklemek çok güzel. "BAĞIMLILIKLAR" ı genişletin ve "Nuget Paketlerini Yönet" seçeneğini seçmek için üzerine sağ tıklayın. Nuget Paketi iletişim kutusu görünecektir, yüklemek istediğiniz herhangi bir Nuget paketini seçin. Aşağıdaki ekran görüntüsüne bakın

3) Şimdi Azure işlevinizi yayınlayın, Visual Studio tüm ayarları vb. Halleder.

Bu yöntem yalnızca Visual Studio 2017 15.4 veya üstünü kullanıyorsanız işe yarar, yoksa başkaları tarafından açıklanan diğer yolları izlemeniz gerekir.


1
Bu, VS / Sınıf Kitaplıkları için standart akıştır (Azure İşlevleri projesi budur) ve Azure İşlevlerine özgü değildir. Azure İşlevlerine özgü adımlar yalnızca aşağıda belgelenen adımlardır. Orijinal cevabıma, 2.0'daki güncellenmiş prosedürün ayrıntılarını içeren bir not ekleyeceğim.
Fabio Cavalcante

7

SFTPBir yerde depolanan harici bir kitaplık olan istemciyi kullanmak istediğimizi varsayalım NuGet.

Bunu başarmak için, en son Azure Functions belirtimine göre aşağıdakileri yapın:

  1. Azure İşlevinizin içindeki dosyalar bölümünü açın ve function.proj.

    görüntü açıklamasını buraya girin Daha fazla bilgi için Microsoft belgelerine bakın .


  1. Bunun function.projiçine, yapıyı Nugetkullanarak paket referansını yerleştirin XML( Visual Studio*.csproj ile yerel bir proje oluşturursanız ve içine bir paket yüklerseniz dosyanın içinde bulabileceğiniz aynı tür yapı ).NuGet

    görüntü açıklamasını buraya girin


  1. Ardından, projeye kütüphane referansını ekleyelim: görüntü açıklamasını buraya girin

    Burada esas olan, kitaplığa tam bir yol sağlamanızdır, örnekte görebileceğiniz gibi: "D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. Daha sonra kitaplığa özgü bazı kodları test edin: görüntü açıklamasını buraya girin

  1. Son olarak, Günlükler bölümünü açın ve kodu kaydedin. Bir süre sonra NuGetpaketlerin günlüğü geri yüklediğini görmelisiniz . görüntü açıklamasını buraya girin

    Not: Bu günlükler, function.projdosya kaydedilirken veya proje çalıştırılırken de görünebilir .


Kitaplık hala bilinmeyen olarak görünüyorsa , Visual Studio'dan Azure Cloud explorerDll kullanarak kitaplığın bin klasörüne manuel olarak eklemeyi deneyin .

görüntü açıklamasını buraya girin


Bu cevaptan beri bir şey değişti mi? Bu artık işe yaramıyor gibi görünüyor. Bir "Derleme hizmeti hatası" görüyorum - 'Functions.TimerTrigger2' yürütüldü (Başarısız, Id = a318d5b7-a02c-4ba0-bb04-037beda89b1c) 'D: \ home \ site \ wwwroot \ bin \ Google.Apis dosyası bulunamadı .Sheets.v4.dll'.
kullanıcı

Aracılığıyla bir komut dosyası yüklediğinizde function.proj, dllbelirli bir süre sonra Günlükler bölümünde bunun konumu görünür. Bazen Azure İşlevi için sayfayı bir kez daha yeniden yüklemeniz gerekir, bazen NuGet paketleri kurulumunu ve konumu görmek için "Çalıştır" düğmesine basmanız gerekir. Lütfen Log bölümünde konum olarak neyin yazdırıldığını kontrol edin ve bunu koymaya çalışın.
Arsen Khachaturyan

2

Visual studio 2017'deki yeni .csproj formatının da desteklendiğini unutmayın. Projenizi bir ASPNET Web Projesi olarak oluşturursanız, Azure Functions çalışma zamanı, projenizi oluşturmadan önce gerekli tüm nuget paketlerini indirir.


ASP.NET Web Projesi için VS 2015 de çalışır. Azure İşlev Araçları için bu yalnızca VS 2017'dir. Buradaki temel fark, önceden derlenmiş bitleri (ve bağımlılıkları) dağıtmanızdır, bu nedenle çalışma zamanı geri yüklemeyi sizin için işlemez, ancak evet, bu gerçekten işlevleri yazmanın ve bağımlılıkları yönetmenin daha yeni bir yoludur. Yanıtı en son özellikleri yansıtacak şekilde güncelleyeceğim.
Fabio Cavalcante
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.