使用 .NET 6 和发布命令成功安装具有 .NET 8 SDK 的 CodeBuild 项目

问题描述 投票:0回答:1

我们正在使用 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 [...]
,结果会成功。

.net aws-codebuild
1个回答
0
投票

最终依靠 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并且发布/打包成功了。

© www.soinside.com 2019 - 2024. All rights reserved.