การใช้Azure Functionsฉันสามารถอ้างอิงและใช้แพ็คเกจ NuGet ในฟังก์ชัน C # ของฉันได้หรือไม่
การใช้Azure Functionsฉันสามารถอ้างอิงและใช้แพ็คเกจ NuGet ในฟังก์ชัน C # ของฉันได้หรือไม่
คำตอบ:
ใช่ แม้ว่าในปัจจุบันพอร์ทัล Azure Functions จะไม่มีกลไกในการเพิ่มและจัดการแพ็คเกจ NuGet แต่รันไทม์รองรับการอ้างอิง NuGet และจะทำให้แน่ใจว่าใช้อย่างถูกต้องเมื่อรวบรวมและเรียกใช้ฟังก์ชันของคุณ
ในการกำหนดการอ้างอิงคุณต้องสร้างProject.json
ไฟล์ที่มีการอ้างอิงแพ็คเกจ NuGet ที่จำเป็น นี่คือตัวอย่างที่เพิ่มการอ้างอิงไปยังMicrosoft.ProjectOxford.Face
เวอร์ชัน 1.1.0:
{
"frameworks": {
"net46":{
"dependencies": {
"Microsoft.ProjectOxford.Face": "1.1.0"
}
}
}
}
พอร์ทัล Azure Functions มีวิธีที่สะดวกในการจัดการไฟล์ฟังก์ชันของคุณซึ่งเราสามารถใช้เพื่อสร้าง (หรืออัปโหลด) ของเราproject.json
:
project.json
ไฟล์ที่สร้างไว้ก่อนหน้านี้ในเครื่องของคุณproject.json
และกำหนดการอ้างอิงแพ็กเกจของคุณ (คุณสามารถใช้ตัวอย่างด้านบนเป็นเทมเพลต)กระบวนการคืนค่าแพ็กเกจจะเริ่มขึ้นและคุณจะเห็นผลลัพธ์ที่คล้ายกับสิ่งต่อไปนี้ในหน้าต่างบันทึกของคุณ:
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.
ตามที่คาดไว้รันไทม์ของฟังก์ชัน Azure จะเพิ่มการอ้างอิงไปยังชุดประกอบแพ็คเกจโดยอัตโนมัติดังนั้นคุณไม่จำเป็นต้องเพิ่มการอ้างอิงแอสเซมบลีอย่างชัดเจนโดยใช้#r "AssemblyName"
คุณสามารถเพิ่มusing
คำสั่งที่ต้องการลงในฟังก์ชันของคุณและใช้ประเภทที่กำหนดไว้ในแพ็คเกจ NuGet ที่คุณ ' ได้อ้างอิง
เนื่องจาก Azure Functions ถูกสร้างขึ้นบน App Services ซึ่งเป็นอีกทางเลือกหนึ่งของขั้นตอนข้างต้นคุณจึงสามารถเข้าถึงตัวเลือกการปรับใช้ที่ยอดเยี่ยมทั้งหมดที่มีให้สำหรับ Azure Web Apps มาตรฐาน (เว็บไซต์ Azure)
นี่คือตัวอย่างบางส่วน:
ในการจัดการไฟล์ของคุณโดยตรงจากเบราว์เซอร์ของคุณโดยใช้ App Service Editor (โมนาโก):
Function app settings
Go to App Service Settings
Tools
ปุ่มOn
หากยังไม่ได้เปิดใช้งานและคลิกที่Go
project.json
ไฟล์ของคุณลงในโฟลเดอร์ของฟังก์ชัน (โฟลเดอร์ที่ตั้งชื่อตามฟังก์ชันของคุณhttps://<function_app_name>.scm.azurewebsites.net
D:\home\site\wwwroot\<function_name>
Project.json
ไฟล์ของคุณลงในโฟลเดอร์ (ลงในตารางไฟล์)เมื่อเชื่อมต่อแล้ว (ทำตามคำแนะนำด้านบน) คัดลอกProject.json
ไฟล์ของคุณไปที่/site/wwwroot/<function_name>
สำหรับตัวเลือกการปรับใช้เพิ่มเติมโปรดดู: https://azure.microsoft.com/en-us/documentation/articles/web-sites-deploy/
หากคุณเปิดใช้งานการรวมอย่างต่อเนื่องและปรับใช้ฟังก์ชันของคุณกับproject.json
ไฟล์เมื่อแอปฟังก์ชันของคุณไม่ได้ทำงานการคืนค่าแพ็คเกจจะเกิดขึ้นโดยอัตโนมัติเมื่อแอปฟังก์ชันของคุณเริ่มต้น ขอแนะนำว่าคุณไม่ควรเพิ่มproject.lock.json
ไฟล์ของคุณในการควบคุมแหล่งที่มา
ฟังก์ชั่นอาจถูกปรับใช้เป็นแอสเซมบลีที่คอมไพล์ไว้ล่วงหน้าและในกรณีนี้การจัดการการพึ่งพาทั้งหมดจะได้รับการจัดการใน Visual Studio ตัวเลือกนี้อาจจะใช้เป็นห้องสมุดชั้นมาตรฐานใน Visual Studio รุ่นใดหรือโดยการใช้Visual Studio 2017 Azure ฟังก์ชั่นเครื่องมือ
function script root
ที่ย่อหน้าสุดท้ายของคุณหรือไม่ ฉันเข้าใจว่ามันเป็นที่project.json
ตั้ง ถูกต้องหรือไม่
project.json
อยู่ในโฟลเดอร์การทำงานของคุณซึ่งเป็นลูกของโฟลเดอร์รากสคริปต์ รากของสคริปต์แมปไปยังwwwroot
โฟลเดอร์ของคุณใน Azure
เธรดนี้ช่วยฉันได้มาก - แต่ฉันยังเสียเวลาสองสามชั่วโมงในการพยายามทำให้ Project.json ทำงาน - โดยไม่มีประโยชน์
หากคุณสร้างฟังก์ชัน Azure ในเวอร์ชัน 2.x คุณต้องทำสิ่งนี้ด้วยวิธีอื่น
สร้างไฟล์ใหม่ตามที่ระบุไว้ แต่ชื่อมันfunction.proj ไฟล์นี้มีโครงสร้าง XML สำหรับการนำเข้าไลบรารีผ่าน Nuget
นี่คือตัวอย่างของฉันในการนำเข้า Amazon S3 SDK สำหรับ. 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>
เมื่อบันทึกสิ่งนี้คุณจะเห็นการอัปเดตคอนโซลที่ระบุว่ากำลังติดตั้งแพ็คเกจ นี่ไม่ใช่เอกสารที่ดีจริงๆและฉันใช้เวลาสองสามชั่วโมงในการค้นหา ดังนั้นฉันหวังว่านี่จะช่วยใครบางคนได้
คุณสามารถใช้แพ็คเกจ Nuget ใน Azure Functions ของคุณได้ วิธีที่ง่ายที่สุดคือใช้ Visual Studio 2017 15.4 ที่มีเทมเพลตสำหรับ Azure Functions ทำตามขั้นตอนด้านล่าง
1) เพิ่มโครงการฟังก์ชัน Azure: คลิกขวาที่โซลูชันและเลือกเพิ่มโครงการใหม่ ไปที่ตัวเลือก CLOUD ที่นั่นคุณจะพบโครงการ "Azure Function"
2) ตอนนี้มันสวยที่จะเพิ่มแพ็คเกจ Nuget ใด ๆ ขยาย "DEPENDENCIES" และคลิกขวาเพื่อเลือกตัวเลือก "Manage Nuget Packages" กล่องโต้ตอบ Nuget Package จะปรากฏขึ้นเลือกแพ็คเกจ Nuget ที่คุณต้องการติดตั้ง ดูภาพหน้าจอด้านล่าง
3) เผยแพร่ฟังก์ชัน Azure ของคุณแล้ว Visual Studio จะดูแลการตั้งค่าทั้งหมดและอื่น ๆ
วิธีนี้จะใช้ได้ผลก็ต่อเมื่อคุณใช้ Visual Studio 2017 15.4 ขึ้นไปหากไม่ใช่คุณจะต้องทำตามวิธีอื่น ๆ ตามที่ผู้อื่นอธิบายไว้
สมมติว่าเราต้องการใช้SFTP
ไคลเอนต์ซึ่งเป็นไลบรารีภายนอกที่เก็บไว้ที่ใดที่หนึ่งในNuGet
.
ในการดำเนินการดังกล่าวให้เป็นไปตามข้อกำหนดล่าสุดของAzure Functionsให้ทำดังต่อไปนี้:
เปิดส่วนไฟล์ภายในฟังก์ชัน Azureของคุณและเพิ่มไฟล์ใหม่ที่เรียกว่าfunction.proj
.
ภายในนั้นfunction.proj
ใส่การNuget
อ้างอิงแพ็กเกจโดยใช้XML
โครงสร้าง (โครงสร้างแบบเดียวกับที่คุณสามารถพบได้ภายใน*.csproj
ไฟล์หากคุณสร้างโปรเจ็กต์โลคัลด้วยVisual Studioและติดตั้งNuGet
แพ็กเกจบางอย่างลงในนั้น)
ต่อไปเรามารวมการอ้างอิงไลบรารีของโครงการ:
สิ่งสำคัญคือคุณควรระบุเส้นทางแบบเต็มไปยังไลบรารีดังตัวอย่างที่คุณเห็นคือ: "D:\home\site\wwwroot\bin\your_custom_library.dll"
สุดท้ายเปิดส่วนบันทึกและบันทึกรหัส หลังจากนั้นสักครู่คุณจะเห็นNuGet
บันทึกการกู้คืนแพ็กเกจ
หมายเหตุ: บันทึกเหล่านี้อาจปรากฏขึ้นเมื่อบันทึกfunction.proj
ไฟล์หรือเมื่อเรียกใช้โครงการ
ในกรณีที่ห้องสมุดยังคงปรากฏเป็นที่ไม่รู้จักพยายามที่จะเพิ่มมันDll
's ด้วยตนเองลงในถังโฟลเดอร์โดยใช้Azure เมฆสำรวจจากVisual Studio
function.proj
, สถานที่สำหรับการที่dll
จะปรากฏในส่วนท่อนหลังจากช่วงระยะเวลาหนึ่ง บางครั้งคุณต้องโหลดหน้าซ้ำสำหรับฟังก์ชัน Azure อีกครั้งบางครั้งกดปุ่ม "Run" เพื่อดูการติดตั้งแพ็คเกจ NuGet และตำแหน่งด้วย โปรดตรวจสอบสิ่งที่กำลังพิมพ์ในส่วนบันทึกเป็นตำแหน่งที่ตั้งและลองใส่สิ่งนั้น
โปรดทราบว่ารูปแบบ. csproj ใหม่ใน Visual studio 2017 ได้รับการสนับสนุนด้วย ถ้าคุณสร้างโปรเจ็กต์ของคุณเป็น ASPNET Web Project รันไทม์ Azure Functions จะดาวน์โหลดแพ็กเกจ nuget ทั้งหมดที่จำเป็นก่อนสร้างโปรเจ็กต์ของคุณ