Как я могу использовать пакеты 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
:
- В разделе разработки функции, нажмите на просмотр файлов
- Нажмите на опцию, чтобы создать файл (вы также можете нажать на опцию, чтобы загрузить файл, если вы ранее создали
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 построены поверх служб приложений, в качестве альтернативы вышеперечисленным шагам у вас также есть доступ ко всем замечательным вариантам развертывания, доступным для стандартных веб-приложений 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
- Следуйте инструкциям здесь, чтобы настроить FTP
После подключения (следуя инструкциям выше) скопируйте
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.
Эта ветка мне очень помогла - но я все еще потратил несколько часов, пытаясь заставить 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".
2) Теперь можно добавить любой пакет Nuget. Разверните "ЗАВИСИМОСТЬ" и щелкните правой кнопкой мыши по нему, чтобы выбрать опцию "Управление пакетами Nuget". Откроется диалоговое окно Nuget Package, выберите любой пакет Nuget, который вы хотите установить. Смотрите скриншот ниже
3) Теперь опубликуйте свою функцию Azure, Visual Studio позаботится обо всех настройках и т. Д.
Этот метод будет работать только в том случае, если вы используете Visual Studio 2017 15.4 или выше, в противном случае вам придется следовать другим путям, как объяснено другими.
Предположим, мы хотим использовать SFTP
client - внешняя библиотека, хранящаяся где-то в NuGet
.
Для этого в соответствии с последней спецификацией функций Azure выполните следующие действия:
Откройте раздел файлов внутри функции Azure и добавьте новый файл с именем
function.proj
.Дополнительные сведения см. В документации Microsoft.
Внутри этого
function.proj
положитьNuget
ссылка на пакет с использованиемXML
структура (такая же структура вы можете найти внутри*.csproj
файл, если вы создаете локальный проект с Visual Studio и устанавливаете некоторыеNuGet
пакет в него).
Затем давайте добавим ссылку на библиотеку в проект:
Здесь важно указать полный путь к библиотеке, как в примере, который вы видите:
"D:\home\site\wwwroot\bin\your_custom_library.dll"
- Затем протестируйте некоторый специфичный для библиотеки код:
Наконец, откройте раздел Журналы и сохраните код. Через некоторое время вы должны увидеть
NuGet
пакеты, восстанавливающие журнал.Примечание: эти журналы также могут появляться при сохранении
function.proj
файл или при запуске проекта.
Если библиотека по-прежнему отображается как неизвестная, попробуйте добавить ее. Dll
вручную в папку bin с помощью Azure Cloud Explorer из Visual Studio.
Обратите внимание, что новый формат.csproj в Visual studio 2017 также поддерживается. Если вы создаете свой проект как веб-проект ASPNET, среда выполнения функций Azure загружает все пакеты nuget, необходимые перед созданием проекта.