将 C# 函数发布到 AWS lambda 时出现“类型或命名空间不存在”错误

Posted

技术标签:

【中文标题】将 C# 函数发布到 AWS lambda 时出现“类型或命名空间不存在”错误【英文标题】:"Type or namespace does not exist" error when publishing a C# function to AWS lambda 【发布时间】:2021-11-26 10:50:46 【问题描述】:

我已经成功部署了一层包,现在正在尝试使用该应用发布我的功能。

存储的 S3 存储桶中的工件文件:

<?xml version="1.0"?>

-<StoreArtifacts>

<Package Version="2.0.0" Id="Amazon.Lambda.Core"/>

<Package Version="1.2.0" Id="Amazon.Lambda.Core"/>

<Package Version="2.1.0" Id="Amazon.Lambda.Serialization.SystemTextJson"/>

<Package Version="1.8.0" Id="DocX"/>

<Package Version="1.18.0" Id="Azure.Core"/>

<Package Version="1.0.0" Id="Microsoft.Bcl.AsyncInterfaces"/>

<Package Version="4.6.0" Id="Microsoft.Graph"/>

<Package Version="2.0.5" Id="Microsoft.Graph.Core"/>

<Package Version="4.35.1" Id="Microsoft.Identity.Client"/>

<Package Version="6.12.2" Id="Microsoft.IdentityModel.JsonWebTokens"/>

<Package Version="6.12.2" Id="Microsoft.IdentityModel.Logging"/>

<Package Version="6.12.2" Id="Microsoft.IdentityModel.Protocols"/>

<Package Version="6.12.2" Id="Microsoft.IdentityModel.Protocols.OpenIdConnect"/>

<Package Version="6.12.2" Id="Microsoft.IdentityModel.Tokens"/>

<Package Version="6.12.2" Id="System.IdentityModel.Tokens.Jwt"/>

<Package Version="1.0.2" Id="System.Memory.Data"/>

<Package Version="13.0.1" Id="Newtonsoft.Json"/>

</StoreArtifacts>

然后我尝试使用以下方法部署该功能:

dotnet lambda deploy-function DemoFunction --function-layers arn:aws:lambda:us-east-2:687758306845:layer:DemoLayer:1

我收到多个错误

... publish: C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\Function.cs(4,7): error CS0246: The type or namespace name 'Xceed' could not be found (are you missing a using directive or an assembly reference?) [C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\DemoTests.csproj]
... publish: C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\Function.cs(5,7): error CS0246: The type or namespace name 'Xceed' could not be found (are you missing a using directive or an assembly reference?) [C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\DemoTests.csproj]
... publish: C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\Function.cs(8,7): error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?) [C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\DemoTests.csproj]
... publish: C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\Function.cs(10,17): error CS0234: The type or namespace name 'Identity' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\DemoTests.csproj]
... publish: C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\Function.cs(11,17): error CS0234: The type or namespace name 'Graph' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\DemoTests.csproj]

我怎样才能让这个部署工作?失败的行位于顶部的导入:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xceed.Document.NET;
using Xceed.Words.NET;
using Amazon.Lambda.Core;
using System.IO;
using Newtonsoft.Json.Linq;
using System.Text.RegularExpressions;
using Microsoft.Identity.Client;
using Microsoft.Graph;
using System.Net.Http.Headers;

【问题讨论】:

【参考方案1】:

您确定您的测试以及您的项目都引用了所需的包吗?

根据您的错误消息,DemoTests.csproj 似乎缺少引用:

[C:\Users\UserX\source\repos\DemoTests\DemoTests\src\DemoTests\DemoTests.csproj]

【讨论】:

哦,是的,这就是问题所在,谢谢!整个下午都在为此苦苦挣扎,因为我对 C# 比较陌生 不用担心@West,享受 C# :)

以上是关于将 C# 函数发布到 AWS lambda 时出现“类型或命名空间不存在”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS Lambda 连接到 Oracle RDS 时出现错误 (DPI-1047)

使用谷歌传输服务将文件从 AWS 传输到 GCP 时出现凭证错误

将 Bref Lambda 自定义运行时与 AWS CDK 一起使用时出现错误 libncurses.so.6

尝试从 AWS Lambda 但不是桌面访问 AWS Device Farm 时出现 SSL 证书错误

从 AWS Lambda 获取 URL 时出现静默错误

在 AWS Lambda 上使用 nodejs“ref”模块时出现“无效的 ELF 标头”