Используя Azure Functions, могу ли я ссылаться и использовать пакеты NuGet в своей функции С#?
Как я могу использовать пакеты NuGet в своих функциях Azure?
Ответ 1
Да! Хотя портал функций 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
: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
когда ваше Function Function не запущено, восстановление пакета произойдет автоматически после инициализации вашего Function Function. Рекомендуется, чтобы вы не добавить project.lock.json
файл в систему управления версиями.
Предварительно скомпилированные сборки
Функции также могут быть развернуты как предварительно скомпилированные сборки, и в этом случае все управление зависимостями обрабатывается в Visual Studio. Этот параметр можно использовать в качестве стандартных библиотек классов в любой версии Visual Studio или с помощью инструментов функций Visual Studio 2017 Azure.
Ответ 2
Эта ветка мне очень помогла - но я все еще потратил несколько часов, пытаясь заставить 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>
после сохранения вы должны увидеть обновление консоли, сообщающее, что пакеты устанавливаются. Это действительно не очень хорошо задокументировано, и мне понадобилось несколько часов, чтобы это выяснить. Надеюсь, это кому-нибудь поможет.
Ответ 3
Вы можете использовать пакеты 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 или более поздней версии, в противном случае вам придется следовать другим путям, как объяснено другими.
Ответ 4
Предположим, мы хотим использовать SFTP-клиент, который является внешней библиотекой, хранящейся где-то в NuGet.
Для этого в соответствии с последней спецификацией функций Azure выполните следующие действия:
Откройте раздел "Файлы" внутри своей функции Azure и добавьте новый файл с именем
function.proj
.Для получения дополнительной информации см. документацию Microsoft documentation.
Внутри этого
function.proj
поместите ссылку на пакет Nuget, используя структуру XML (такую же структуру вы можете найти в файле*.csproj
, если вы создаете локальный проект с помощью Visual Studio и устанавливаете в него какой-то пакет NuGet).
Далее, давайте включим библиотечную ссылку на проект:
Здесь важно, чтобы вы указали полный путь к библиотеке, как в следующем примере:
"D:\home\site\wwwroot\bin\your_custom_library.dll"
Наконец, откройте раздел "Журналы" и сохраните код. Через некоторое время вы увидите журнал восстановления пакетов NuGet.
Примечание. Эти журналы также могут отображаться при сохранении файла
function.proj
или при запуске проекта.
Если библиотека по-прежнему отображается как неизвестная, попробуйте добавить ее вручную в папку bin с помощью обозревателя облаков Azure из Visual Studio.
Ответ 5
Обратите внимание, что поддерживается также новый формат .csproj в Visual studio 2017. Если вы создаете свой проект как веб-проект ASPNET, во время выполнения функций Azure загружаются все пакеты нуджетов, необходимые до создания вашего проекта.
Ответ 6
Для функций Azure 2.0 имя файла: function.proj NOT [project.json].
Ссылка: https://github.com/Azure/azure-functions-host/issues/3539