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

通过GitHub Actions部署的AWS .NET 6 Lambda获取目录路径问题

解决AWS .NET 6 Lambda读取text-files文件夹的问题

核心原因

你遇到的问题并非路径获取逻辑错误,而是text-files文件夹及其中的文件未被包含进Lambda的部署包。GitHub Actions部署时,若项目配置未明确指定,这类静态文件不会被打包到/var/task目录下,自然找不到对应路径。

解决步骤

1. 修改项目配置文件(MyFunction.csproj)

必须在.csproj中添加配置,确保text-files下的所有文件被复制到项目输出目录,这样部署时才会被打包进Lambda环境:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <LambdaRuntime>dotnet6</LambdaRuntime>
    <PublishReadyToRun>true</PublishReadyToRun>
    <PublishSingleFile>true</PublishSingleFile>
    <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
    <SelfContained>false</SelfContained>
  </PropertyGroup>

  <!-- 新增此配置段,确保静态文件被打包 -->
  <ItemGroup>
    <None Include="text-files\**" CopyToOutputDirectory="PreserveNewest" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Amazon.Lambda.Core" Version="2.1.0" />
    <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.0" />
  </ItemGroup>
</Project>
- `Include="text-files\**"`:匹配`text-files`文件夹下所有文件及子目录
- `CopyToOutputDirectory="PreserveNewest"`:将这些文件同步到项目输出目录,部署时会被纳入Lambda部署包

### 2. 正确的路径读取逻辑
配置完成后,你之前使用的`LAMBDA_TASK_ROOT`是Lambda官方推荐的执行目录环境变量,此时可以正常使用:
```csharp
var taskRoot = Environment.GetEnvironmentVariable("LAMBDA_TASK_ROOT");
var directoryPath = Path.Combine(taskRoot, "text-files");

// 可选:先验证路径存在性
if (Directory.Exists(directoryPath))
{
    // 读取文件示例
    var files = Directory.GetFiles(directoryPath);
    foreach (var file in files)
    {
        var content = File.ReadAllText(file);
        // 处理文件内容逻辑
    }
}

3. 验证GitHub Actions部署流程

确保GitHub Actions的部署步骤基于dotnet publish的输出打包,比如典型流程:

- name: 发布Lambda项目
  run: dotnet publish -c Release -o ./publish

- name: 部署到AWS Lambda
  uses: aws-actions/aws-lambda-deploy@v2
  with:
    function-name: 你的Lambda函数名
    zip-file: ./publish/你的项目名.zip

./publish目录会包含所有输出文件(包括text-files),部署后会被解压到Lambda的/var/task目录下。

总结

只要通过.csproj配置确保静态文件被打包,使用LAMBDA_TASK_ROOT拼接路径即可正常读取text-files中的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:55:16