Могу ли я ссылаться на пакеты NuGet в своей функции C # с помощью функций Azure ?
Могу ли я ссылаться на пакеты NuGet в своей функции C # с помощью функций Azure ?
Ответы:
Да! Хотя портал функций 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).
Вот некоторые примеры:
Чтобы управлять файлами прямо из браузера с помощью редактора службы приложений (Монако):
Function app settings
Go to App Service Settings
Tools
кнопкуOn
если он еще не включен, и нажмитеGo
project.json
файл в папку вашей функции (папку, названную в честь вашего файла function.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 Functions Tools .
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. Самый простой способ - использовать Visual Studio 2017 15.4, где есть шаблон для Функций Azure. Следуйте инструкциям ниже
1) Добавить проект функции Azure: щелкните решение правой кнопкой мыши и выберите «Добавить новый проект». Перейдите к опции ОБЛАКА, там вы найдете проект «Функция Azure».
2) Теперь неплохо добавить любой пакет Nuget. Разверните «ЗАВИСИМОСТИ» и щелкните его правой кнопкой мыши, чтобы выбрать опцию «Управление пакетами Nuget». Появится диалоговое окно Nuget Package, выберите любой пакет Nuget, который вы хотите установить. Смотрите скриншот ниже
3) Теперь опубликуйте свою функцию Azure, Visual Studio позаботится обо всех настройках и т. Д.
Этот метод будет работать, только если вы используете Visual Studio 2017 15.4 или более поздней версии, в противном случае вам придется использовать другие способы, объясненные другими.
Предположим, мы хотим использовать SFTP
клиент, который представляет собой внешнюю библиотеку, хранящуюся где-то в 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 .
function.proj
, местоположение для dll
него появляется в разделе журналов через некоторое время. Иногда вам нужно перезагрузить страницу для функции Azure еще раз, иногда нажмите кнопку «Выполнить», чтобы увидеть установку пакетов NuGet, а также местоположение. Пожалуйста, проверьте, что печатается в разделе «Журнал» как место, и попробуйте это указать.
Обратите внимание, что также поддерживается новый формат .csproj в Visual Studio 2017. Если вы создаете свой проект как веб-проект ASPNET, среда выполнения Функций Azure загружает все пакеты nuget, необходимые перед сборкой проекта.