Как я могу использовать пакеты NuGet в своих функциях Azure?

Используя функции Azure, могу ли я ссылаться на пакеты NuGet и использовать их в своей функции C#?

4 ответа

Решение

Да! Хотя портал функций 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.

Эта ветка мне очень помогла - но я все еще потратил несколько часов, пытаясь заставить 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. Проще всего будет использовать Visual Studio 2017 15.4, где есть шаблон для функций Azure. Следуйте ниже шагов

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

Функция Azure

2) Теперь можно добавить любой пакет Nuget. Разверните "ЗАВИСИМОСТЬ" и щелкните правой кнопкой мыши по нему, чтобы выбрать опцию "Управление пакетами Nuget". Откроется диалоговое окно Nuget Package, выберите любой пакет Nuget, который вы хотите установить. Смотрите скриншот ниже

3) Теперь опубликуйте свою функцию Azure, Visual Studio позаботится обо всех настройках и т. Д.

Этот метод будет работать только в том случае, если вы используете Visual Studio 2017 15.4 или выше, в противном случае вам придется следовать другим путям, как объяснено другими.

Предположим, мы хотим использовать SFTP client - внешняя библиотека, хранящаяся где-то в 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.

Обратите внимание, что новый формат.csproj в Visual studio 2017 также поддерживается. Если вы создаете свой проект как веб-проект ASPNET, среда выполнения функций Azure загружает все пакеты nuget, необходимые перед созданием проекта.

Другие вопросы по тегам