У меня та же проблема, но, надеюсь, я могу предложить немного нового взгляда на нее.
Вместо того, чтобы использовать AWS deploy lambda
, мы упаковываем наши лямбды и отправляем их на S3, чтобы CloudFormation мог их развернуть.При этом используется инструментарий AWS dotnet для создания пакета развертывания (что и делает aws deploy lambda в фоновом режиме).Шаг PowerShell, который выполняет это, выглядит следующим образом:
dotnet lambda package
Результирующий пакет обычно генерируется в папке bin / release под вашим проектом.
Затем вы можете добавить параметры --msbuild-parameters "--no-restore"
в процесс упаковки, который не вызовет этап автоматического восстановления.Внутри Azure DevOps Build Pipelines вы можете задать шаг сборки до того, как он будет восстановлен для всех решений или файлов csproj, которые будут автоматически аутентифицироваться на вашем фиде.Мы также установили номер версии сборок, и я хотел избавиться от раздражающего предупреждения, чтобы наша текущая версия этого вызова выглядела так:
dotnet lambda package ("/p:Version=" + $VersionNumber) "/p:PreserveCompilationContext=false" --msbuild-parameters "--no-restore"
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что передача вmsbuild-параметры, кажется, устанавливают платформу, чтобы предназначаться для Linux Red Hat (rhel.7.2-x64), приводя к следующей ошибке:
publish: C:\Program Files\dotnet\sdk\2.1.500\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(198,5): error NETSDK1047: Assets file 'C:\Agent\_work\1\s\Kiosk.Microservice.User.Lambda.Command\obj\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v2.0/rhel.7.2-x64'. Ensure that restore has run and that you have included 'netcoreapp2.0' in the TargetFrameworks for your project. You may also need to include 'rhel.7.2-x64' in your project's RuntimeIdentifiers. [C:\Agent\_work\1\s\Kiosk.Microservice.User.Lambda.Command\Kiosk.Microservice.User.Lambda.Command.csproj]
Я очень явно хочу, чтобы это строило для dotnetcore2.0, поэтому я нена самом деле не хочу строить для Red Hat Linux.
Это то место, где я сейчас застрял, как будто я не использую этот флаг для остановки шага восстановления неаутентифицированного nuget, я получаю неавторизованную ошибку и не могу передать dotnet.exe мои учетные данные фида.Если я использую этот флаг, он будет создан для Red Hat Linux без четкой причины.Надеюсь, это продвинет вас хоть немного дальше!
Обновление: теперь у меня все работает.Я пошел и нашел упаковщик dotnet cli, который dotnet lambda publish
фактически использует в репозитории git для набора инструментов , и продублировал его шаги без посредника.Поскольку флаг msbuild-parameters больше не использовался, он не пытался встроить его в Red Hat Linux.Я также должен был создать почтовый файл впоследствии, но это довольно тривиально.Ниже приведен PowerShell, создающий новые пакеты без набора инструментов aws dotnet:
# Run the build that will generate the proper files
dotnet publish --no-restore -f netcoreapp2.0 -c Release
# Create the path to the zip file
$PathToZip = $PathToCSProj + "\bin\Release\netcoreapp2.0\publish"
# Create the zip file
Compress-Archive -Path $PathToZip -DestinationPath ($PathToZip + $csproj[0].Name.trim(".csproj") + ".zip")
Надеюсь, это поможет!