我们正在使用 AWS 提供的
aws/codebuild/amazonlinux2-x86_64-standard:5.0
CodeBuild 映像,并在我们的构建规范文件中安装 .NET 8 SDK:
/usr/local/bin/dotnet-install.sh --channel 8.0
运行成功,我们用
dotnet --list-sdks
确认并得到以下输出:
[Container] 2024/03/28 00:29:20.812199 Running command dotnet --list-sdks
6.0.419 [/root/.dotnet/sdk]
8.0.201 [/root/.dotnet/sdk]
8.0.203 [/root/.dotnet/sdk]
但是,当我们尝试使用
dotnet lambda package --configuration Release --framework net8.0 --output-package deploy-package.zip
构建/打包我们的 .NET 8 应用程序时
似乎忽略了已安装 .NET 8 SDK 的事实并选择了 .NET 6。这是不兼容且出错的。
Executing publish command
... invoking 'dotnet publish', working folder '/codebuild/output/src1972822102/src/MyApp.API/bin/Release/net8.0/publish'
... dotnet publish "/codebuild/output/src1972822102/src/MyApp.API" --output "/codebuild/output/src1972822102/src/MyApp.API/bin/Release/net8.0/publish" --configuration "Release" --framework "net8.0" /p:GenerateRuntimeConfigurationFiles=true --runtime linux-x64 --self-contained False
... publish: MSBuild version 17.3.2+561848881 for .NET
... publish: Determining projects to restore...
... publish: /root/.dotnet/sdk/6.0.419/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 8.0. Either target .NET 6.0 or lower, or use a version of the .NET SDK that supports .NET 8.0. [/codebuild/output/src1972822102/src/MyApp.Core/MyApp.Core.csproj]
... publish: /root/.dotnet/sdk/6.0.419/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 8.0. Either target .NET 6.0 or lower, or use a version of the .NET SDK that supports .NET 8.0. [/codebuild/output/src1972822102/src/WebAst.WebApi.Core/WebAst.WebApi.Core.csproj]
... publish: /root/.dotnet/sdk/6.0.419/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 8.0. Either target .NET 6.0 or lower, or use a version of the .NET SDK that supports .NET 8.0. [/codebuild/output/src1972822102/src/MyApp.Utilities/MyApp.Utilities.csproj]
... publish: /root/.dotnet/sdk/6.0.419/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 8.0. Either target .NET 6.0 or lower, or use a version of the .NET SDK that supports .NET 8.0. [/codebuild/output/src1972822102/src/WebAst.AWS.Utilities/WebAst.AWS.Utilities.csproj]
... publish: /root/.dotnet/sdk/6.0.419/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 8.0. Either target .NET 6.0 or lower, or use a version of the .NET SDK that supports .NET 8.0. [/codebuild/output/src1972822102/src/MPR.Cognito.Extensions.Reporting/MPR.Cognito.Extensions.Reporting.csproj]
... publish: /root/.dotnet/sdk/6.0.419/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 8.0. Either target .NET 6.0 or lower, or use a version of the .NET SDK that supports .NET 8.0. [/codebuild/output/src1972822102/src/MyApp.API.Reporting/MyApp.API.Reporting.csproj]
... publish: /root/.dotnet/sdk/6.0.419/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 8.0. Either target .NET 6.0 or lower, or use a version of the .NET SDK that supports .NET 8.0. [/codebuild/output/src1972822102/src/MyApp.API/MyApp.API.csproj]
ERROR: The dotnet publish command return unsuccessful error code
[Container] 2024/03/28 00:29:32.414499 Command did not exit successfully dotnet dotnet-lambda package --configuration Release --framework net8.0 --output-package deploy-package.zip exit status 255
[Container] 2024/03/28 00:29:32.420173 Phase complete: BUILD State: FAILED_WITH_ABORT
[Container] 2024/03/28 00:29:32.420194 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: dotnet dotnet-lambda package --configuration Release --framework net8.0 --output-package deploy-package.zip. Reason: exit status 255
在本地大致相同的情况下(同时安装多个 SDK 版本 [6.X.X、7.X.X 和 8.X.X] - 在本地此某些解决方案上运行
dotnet build
以及 dotnet lambda package [...]
,结果会成功。
最终依靠 CodeBuild 功能在
runtime-versions
阶段提供您想要的 install
。
从 buildpsec 中完全删除了步骤
/usr/local/bin/dotnet-install.sh --channel 8.0
,转而采用下面的步骤,效果很好。
version: 0.2
phases:
install:
runtime-versions:
dotnet: 8.0
6 和 8 将同时可用/安装。
[Container] 2024/03/29 13:48:09.859931 Running command dotnet --list-sdks
6.0.419 [/root/.dotnet/sdk]
8.0.201 [/root/.dotnet/sdk]
但是现在运行时
dotnet lambda package --configuration Release --framework net8.0 --output-package deploy-package.zip
使用了正确的SDK并且发布/打包成功了。