.NET Core 6项目GitHub Actions构建出现NETSDK1194警告求助
问题背景
将项目从.NET Core 3.1迁移至6.0后,使用GitHub Actions构建时出现以下警告:
/usr/share/dotnet/sdk/7.0.203/Current/SolutionFile/ImportAfter/Microsoft.NET.Sdk.Solution.targets(36,5): warning NETSDK1194: The "--output" option isn't supported when building a solution. Specifying a solution-level output path results in all projects copying outputs to the same directory, which can lead to inconsistent builds.
对应的GitHub Actions配置文件如下:
name: Lambda Image Build (CI) on: push: branches-ignore: - main - master jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: '0' - name: Setup .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Test run: dotnet test working-directory: MyProject.Tests - name: Setup .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Setup NuGet uses: NuGet/setup-nuget@v1.0.5 with: nuget-version: latest - name: Install dependencies run: dotnet restore working-directory: MyProject - name: Install dotnet lambda run: dotnet tool install -g Amazon.Lambda.Tools working-directory: MyProject - name: Build env: TAG_VERSION: ${{ steps.bump_version.outputs.new_tag }} run: dotnet lambda package .lambda/$( echo ${{ github.repository }} | cut -f 2 -d '/' ).zip s3://${{ secrets.S3_BUCKET }}/$( echo ${{ github.repository }} | cut -f 2 -d '/' )/${{ github.sha }}/$( echo ${{ github.repository }} | cut -f 2 -d '/' ).zip working-directory: MyProject - name: CHECK run: ls -al; echo $REPO_NAME; env: REPO_NAME: ${{ github.repository }} working-directory: ./
问题原因
.NET 6+ SDK严格限制了解决方案级构建时使用--output选项,因为多项目共享同一输出目录会导致文件覆盖、构建结果不一致等问题。你的dotnet lambda package命令执行时,默认针对当前目录的解决方案文件运行,并隐含使用了--output参数,从而触发了该警告。
解决方案
1. 针对单个项目执行lambda package命令
修改Build步骤的run命令,明确指定要打包的项目文件(而非解决方案),示例如下:
dotnet lambda package --project MyProject.csproj .lambda/$( echo ${{ github.repository }} | cut -f 2 -d '/' ).zip s3://${{ secrets.S3_BUCKET }}/$( echo ${{ github.repository }} | cut -f 2 -d '/' )/${{ github.sha }}/$( echo ${{ github.repository }} | cut -f 2 -d '/' ).zip
该命令直接针对单个项目构建,避免了解决方案级别的--output使用场景,可消除警告。
2. 额外优化(可选)
配置中重复执行了Setup .NET Core步骤,可删除其中一个,减少冗余操作。
内容的提问来源于stack exchange,提问作者user1131926

