Як я можу використовувати пакети NuGet у своїх функціях Azure?


112

Використовуючи функції Azure , чи можу я посилатись та використовувати пакети NuGet у своїй функції C #?


Мені довелося оновити мій файл project.json вручну, щоб перезапустити функціональну службу .. тоді він відновив мої нут-пакети. Хтось знає кращий спосіб перезапустити службу, щоб змусити її відновити пакети? Куду не допомогло
Ерік Бергштедт

1
Ви можете використовувати стандартну опцію відновлення сайту в налаштуваннях додатка функції. Але майте на увазі, що коли функція вперше виконується, якщо файл project.json містить набір посилань, який відрізняється від попередньо відновленого, операція відновлення відбуватиметься в цей час автоматично.
Fabio Cavalcante

Відповіді:


141

Так! Хоча портал функцій Azure в даний час не забезпечує механізм додавання і управління пакетами NuGet, час виконання підтримує посилання NuGet і переконається, що вони правильно використовуються при складанні та виконанні ваших функцій.

Для того, щоб визначити свої залежності, вам потрібно створити Project.jsonфайл із необхідними посиланнями NuGet. Ось приклад, який додає посилання на Microsoft.ProjectOxford.Faceверсію 1.1.0:

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

Портал функцій Azure пропонує зручний спосіб управління файлами функцій, які ми можемо використовувати для створення (або завантаження) наших project.json:

  1. У розділі розробки функції натисніть на перегляд файлів
  2. Клацніть на опцію для створення файлу (ви також можете натиснути на опцію для завантаження файлу, якщо project.jsonна вашій машині створений раніше створений файл
  3. Назвіть файл 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 побудовані на основі Служб додатків, як альтернатива вищезазначеним крокам, ви також маєте доступ до всіх чудових варіантів розгортання, доступних для стандартних веб-додатків Azure (веб-сайтів Azure).

Ось кілька прикладів:

Використання редактора служб додатків (Монако)

Щоб керувати своїми файлами безпосередньо зі свого веб-переглядача, використовуйте Редактор служб додатків (Монако):

  • На порталі функцій Azure натисніть на Function app settings
  • У розділі Розширені налаштування натисніть наGo to App Service Settings
  • Натисніть на Toolsкнопку
  • У розділі Розвиток натисніть Редактор служб додатків
  • Увімкніть його, Onякщо воно ще не ввімкнено, і натисніть наGo
  • Після завантаження перетягніть project.jsonфайл у папку вашої функції (папка, названа за вашою функцією.

Використання кінцевої точки SCM (Kudu)

  • Перейдіть до: https://<function_app_name>.scm.azurewebsites.net
  • Клацніть на консолі налагодження> CMD
  • Перейдіть до D:\home\site\wwwroot\<function_name>
  • Перетягуйте Project.jsonфайл у папку (у сітку файлів)

FTP

Постійна інтеграція

Якщо ви ввімкнете постійну інтеграцію та розгортаєте свою функцію з project.jsonфайлом, коли додаток для функцій не працює, відновлення пакета відбудеться автоматично, як тільки ваша функціональна програма ініціюється. Рекомендується не додавати project.lock.jsonфайл до керування джерелом.

Попередньо складені збірки

Функції також можуть бути розгорнуті як попередньо складені збірки, і в цьому випадку все управління залежностями обробляється у Visual Studio. Цей параметр може використовуватися як бібліотеки стандартного класу на будь-якій версії Visual Studio або за допомогою інструментів функцій Visual Studio 2017 Azure .


1
Що є function script rootу вашому останньому абзаці? Я розумію, що там, де project.jsonзнаходиться. Це правильно?
justinyoo

2
@JustInChronicles, це насправді одна папка вгорі. Це project.jsonзнаходиться у вашій папці функцій, яка є дочірньою папкою кореня сценарію. Корінь сценарію відображається у вашій wwwrootпапці в Azure.
Фабіо Кавалканте

Дякуємо за роз’яснення!
justinyoo

@FabioCavalcante, Любіть цілий пакунок, який ви поставили, наприклад, стільки дивовижних речей з блакитними когнітивними послугами !!!
Томас

Будь ласка , зверніть увагу , що «Visual Studio Online» згадується в StackOverflow відповідь вище stackoverflow.com/a/36411537/5288052 доступний з інструментів Azure як «App редактор служби» (див stackoverflow.com/a/38173438/5288052 )
Стефано Spinucci

35

Цей потік мені дуже допоміг, але я все-таки витратив кілька годин, намагаючись примусити 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>

після збереження цього ви повинні побачити оновлення консолі, в якому зазначено, що пакети встановлюються. Це дійсно не добре задокументовано, і мені знадобилося кілька годин, щоб дізнатися це. Тож сподіваюся, що це комусь допоможе.


2
Це була велика допомога, дякую за публікацію. Ось посилання з додатковою інформацією.

1
Як і ви, я витратив години, щоб зробити те саме. Це працює. Дуже дякую. Любіть stackoverflow!
karrtojal

13

Ви можете використовувати пакунки Nuget у своїх функціях Azure. Найпростішим способом буде використання Visual Studio 2017 15.4, де є шаблон для функцій Azure. Виконайте нижче кроки

1) Додати функцію Azure Проект: Клацніть правою кнопкою миші рішення та виберіть Додати новий проект. Перейдіть до опції CLOUD, там ви знайдете проект "Функція Azure".

Функція Azure

2) Тепер досить додавати будь-який пакет Nuget. Розгорніть "ЗАЛІЗНИКИ" і клацніть правою кнопкою миші на ньому, щоб вибрати опцію "Керувати Nuget пакетами". З'явиться діалогове вікно Nuget Package, виберіть будь-який пакет Nuget, який ви хочете встановити. Дивіться скріншот нижче

3) Тепер опублікуйте свою функцію Azure, Visual Studio подбає про всі налаштування тощо.

Цей метод буде працювати лише в тому випадку, якщо ви використовуєте Visual Studio 2017 15.4 або вище, якщо ні, вам не доведеться дотримуватися інших способів, пояснених іншими.


1
Це стандартний потік для бібліотек VS / Class (саме таким є проект функцій Azure) і не характерний для функцій Azure. Єдині кроки, характерні для функцій Azure, - це описані нижче документи. Я додам примітку до своєї оригінальної відповіді, включаючи подробиці оновленої процедури в 2.0.
Fabio Cavalcante

7

Припустимо, ми хочемо використовувати SFTPклієнт, який є зовнішньою бібліотекою, яка зберігається десь у NuGet.

Для цього, згідно з останньою специфікацією функцій Azure , виконайте наступне:

  1. Відкрийте розділ файлів всередині функції Azure та додайте новий файл під назвою function.proj.

    введіть тут опис зображення Для отримання додаткової інформації зверніться до документації Microsoft .


  1. Всередині цього посилання на посилання function.projна Nugetпакет використовується XMLструктура (такий самий тип структури, який ви можете знайти всередині *.csprojфайлу, якщо ви створюєте локальний проект за допомогою Visual Studio і встановлюєте NuGetв нього якийсь пакет).

    введіть тут опис зображення


  1. Далі, включимо посилання на бібліотеку до проекту: введіть тут опис зображення

    Тут важливо, що ви повинні надати повний шлях до бібліотеки, як у прикладі, який ви бачите: "D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. Наступний тест деякого коду, характерного для бібліотеки: введіть тут опис зображення

  1. Нарешті, відкрийте розділ Журнали та збережіть код. Через деякий час ви побачите NuGetжурнал відновлення пакетів. введіть тут опис зображення

    Примітка. Ці журнали також можуть з'являтися під час збереження function.projфайлу або під час запуску проекту.


У випадку, якщо бібліотека все ще видається невідомою, спробуйте додати її Dllвручну в папку bin, використовуючи Azure Cloud Explorer з Visual Studio .

введіть тут опис зображення


Чи щось змінилося після цієї відповіді? Схоже, це більше не працює. Я бачу "помилку служби компіляції" - виконується "Functions.TimerTrigger2" (не вдалося, id = a318d5b7-a02c-4ba0-bb04-037beda89b1c) Не вдалося знайти файл "D: \ home \ site \ wwwroot \ bin \ Google.Apis .Sheets.v4.dll '.
користувач

Коли ви встановлюєте скрипт через function.proj, dllчерез деякий проміжок часу в розділі Журнали відображається місце для розділу. Іноді вам потрібно ще раз перезавантажити сторінку для функції Azure, іноді натисніть кнопку «Виконати», щоб побачити встановлення пакетів NuGet, а також місце розташування. Будь ласка, перевірте, що друкується у розділі Журнал як місцеположення, і спробуйте поставити це.
Арсен Хачатурян

2

Зауважте, що новий формат .csproj у Visual studio 2017 також підтримується. Якщо ви створюєте проект як веб-проект ASPNET, час виконання функцій Azure завантажує всі необхідні пакети перед створенням проекту.


Для веб-проекту ASP.NET також працює VS 2015. Для інструментів функцій Azure це лише VS 2017. Ключова відмінність полягає в тому, що ви розгортаєте заздалегідь складені біти (і залежності), тому час виконання не обробляє відновлення для вас, але так, це дійсно новіший спосіб запису функцій та управління залежностями. Я оновлю відповідь, щоб відобразити останні функції.
Фабіо Кавалканте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.