Azure İşlevlerini kullanarak C # işlevimde NuGet paketlerine başvurabilir ve bunları kullanabilir miyim?
Azure İşlevlerini kullanarak C # işlevimde NuGet paketlerine başvurabilir ve bunları kullanabilir miyim?
Yanıtlar:
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.Face
1.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
:
project.json
makinenizde önceden oluşturulmuş bir dosya varsa, bir dosya yükleme seçeneğine de tıklayabilirsiniz.project.json
ve 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 using
ifadeleri işlevinize ekleyebilir ve NuGet paketinde tanımlanan türleri kullanabilirsiniz. referans verdim.
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:
Dosyalarınızı App Service Editor (Monako) kullanarak doğrudan tarayıcınızdan yönetmek için:
Function app settings
Go to App Service Settings
Tools
düğmesiOn
Zaten etkinleştirilmemişse çevirin ve tıklayınGo
project.json
dosyanızı sürükleyip işlevinizin klasörüne (işlevinizin adını taşıyan klasör) bırakın.https://<function_app_name>.scm.azurewebsites.net
D:\home\site\wwwroot\<function_name>
Project.json
Dosyanızı klasöre sürükleyip bırakın (dosya ızgarasına)Bağlandıktan sonra (yukarıdaki talimatları izleyerek) Project.json
dosyanızı şuraya kopyalayın:/site/wwwroot/<function_name>
Ek dağıtım seçenekleri için bkz: https://azure.microsoft.com/en-us/documentation/articles/web-sites-deploy/
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.json
kaynak kontrolü için dosyayı.
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 .
function script root
son paragrafa? Nerede project.json
olduğunu anlıyorum . Bu doğru mu?
project.json
Senaryo 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.
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.
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.
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.
SFTP
Bir 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:
Azure İşlevinizin içindeki dosyalar bölümünü açın ve function.proj
.
Daha fazla bilgi için Microsoft belgelerine bakın .
Bunun function.proj
içine, yapıyı Nuget
kullanarak 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
Ardından, projeye kütüphane referansını ekleyelim:
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"
Son olarak, Günlükler bölümünü açın ve kodu kaydedin. Bir süre sonra NuGet
paketlerin günlüğü geri yüklediğini görmelisiniz .
Not: Bu günlükler, function.proj
dosya 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 .
function.proj
, dll
belirli 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.
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.