You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# AWS CDK部署.NET 8项目时引用类库找不到的问题

.NET Lambda + CDK 打包失败排查:构建成功但提示找不到项目

场景重现

目录结构

函数与类库项目路径:

C:\dev\testproj1\apps\func-code\src\LambdaProjectLibrary\LambdaProjectLibrary.csproj
C:\dev\testproj1\apps\func-code\src\LambdaProjectFunction\LambdaProjectFunction.csproj
C:\dev\testproj1\apps\func-code\src\lambda.sln

CDK项目路径:

C:\dev\testproj1\infra\src\infra.sln
C:\dev\testproj1\infra\src\infra\infra.csproj

CDK 配置代码

var buildOption = new BundlingOptions()
{
    Image = Runtime.DOTNET_8.BundlingImage,
    User = "root",
    OutputType = BundlingOutput.ARCHIVED,
    Command = new string[]{
        "/bin/sh",
        "-c",
        " dotnet tool install -g Amazon.Lambda.Tools"+
        " && dotnet build"+
        " && dotnet lambda package --output-package /asset-output/function.zip"
    }
};

var function = new Function(this, "LambdaFunc", new FunctionProps {
    Runtime = Runtime.DOTNET_8,
    Code = Code.FromAsset("../apps/func-code/src", new Amazon.CDK.AWS.S3.Assets.AssetOptions
    {
        Bundling = buildOption
    }),
});

错误日志

运行cdk synth时输出:

Bundling asset testproj1-InfraStack/LambdaFunc/Code/Stage...
Skipping NuGet package signature verification.
MSBuild version 17.9.4+90725d08d for .NET
  Determining projects to restore...
  Restored /asset-input/LambdaProjectLibrary/LambdaProjectLibrary.csproj (in 173 ms).
  Restored /asset-input/LambdaProjectFunction/LambdaProjectFunction.csproj (in 7.84 sec).
  
 LambdaProjectLibrary -> /asset-input/LambdaProjectLibrary/bin/Debug/net8.0/LambdaProjectLibrary.dll
  LambdaProjectFunction -> /asset-input/LambdaProjectFunction/bin/Debug/net8.0/LambdaProjectFunction.dll

Build succeeded.

Time Elapsed 00:00:30.48
Amazon Lambda Tools for .NET Core applications (5.10.2)
Project Home: https://github.com/aws/aws-extensions-for-dotnet-cli, https://github.com/aws/aws-lambda-dotnet

No .NET project found in directory /asset-input to build.
Unhandled exception. System.Exception: Failed to bundle asset ...

核心问题:移除LambdaProjectLibrary引用后,cdk synth可正常执行;添加引用后,构建成功但打包阶段提示找不到项目。


问题原因

dotnet lambda package命令默认会在当前工作目录下查找可打包的.NET项目。当解决方案目录下同时存在类库项目和Lambda函数项目时,工具无法自动识别哪个是目标函数项目,因此抛出"找不到项目"的错误。

移除类库引用后,目录下只有Lambda函数项目,工具可以自动识别并打包,因此能正常执行。


解决方案

修改Bundling命令中的dotnet lambda package部分,明确指定Lambda函数项目的路径,让工具精准定位到要打包的项目。修改后的代码如下:

var buildOption = new BundlingOptions()
{
    Image = Runtime.DOTNET_8.BundlingImage,
    User = "root",
    OutputType = BundlingOutput.ARCHIVED,
    Command = new string[]{
        "/bin/sh",
        "-c",
        " dotnet tool install -g Amazon.Lambda.Tools"+
        " && dotnet build"+
        " && dotnet lambda package --project-location /asset-input/LambdaProjectFunction --output-package /asset-output/function.zip"
    }
};

关键改动是在dotnet lambda package后添加--project-location /asset-input/LambdaProjectFunction参数,指定函数项目的目录,确保工具不会混淆类库和函数项目。


内容的提问来源于stack exchange,提问作者user20358

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:20:31