Azure门户CSX格式Blob触发函数引用NuGet包报CS0006错误
Blob触发型Azure Function(CSX脚本格式)找不到SixLabors.ImageSharp元数据文件报错
问题现象
门户内编辑CSX脚本开发Blob触发型Azure Function时,运行抛出如下错误:
run.csx(2,1): error CS0006: Metadata file 'SixLabors.ImageSharp' could not be found
原有代码与配置
run.csx 代码
#r "SixLabors.ImageSharp" using SixLabors.ImageSharp; using SixLabors.ImageSharp.Processing; public static void Run(Stream myBlob, string name, Stream imageSmall, ILogger log) { log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes"); using var image = Image.Load(myBlob); int width = image.Width / 2; int height = image.Height / 2; image.Mutate(x => x.Resize(width, height)); image.Save(imageSmall); }
注:原代码日志中Bolob为笔误,修正为Blob即可,不影响编译运行
原有错误配置
先后尝试的两种function.proj配置均存在语法错误:
- 目标框架.NETCoreApp 3.1版本配置
<PropertyGroup> <TargetFramework>.NETCoreApp,Version=v3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackReference Include="SixLabors.ImageSharp" Version="2.1.2"/> </ItemGroup>
- 目标框架netstandard2.1版本配置
<PropertyGroup> <TargetFramework>netstandard2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackReference Include="SixLabors.ImageSharp" Version="2.1.2"/> </ItemGroup>
报错原因
配置存在三个核心问题,导致NuGet包无法正常还原、引用:
- 引用节点拼写错误:NuGet包引用的正确节点名为
<PackageReference>,配置中写的<PackReference>少了age字段,构建系统完全无法识别要引入的包 - 缺少项目根节点声明:function.proj本质是MSBuild项目文件,必须以带SDK声明的
<Project>标签为根节点,原有配置直接从PropertyGroup开始,格式不合法 - 目标框架写法不规范:.NET Core 3.1的正确目标框架标识为
netcoreapp3.1,不需要加.NETCoreApp,Version=前缀;CSX脚本模式下也不建议用netstandard2.1作为函数项目的目标框架
修正方案
- 将function.proj替换为以下正确内容(适配Azure Functions V3运行时):
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="SixLabors.ImageSharp" Version="2.1.2"/> </ItemGroup> </Project>
- 保存配置后,重启函数应用,等待控制台提示包还原完成(通常需要10-30秒)
- 重新上传测试Blob触发函数即可正常运行
内容的提问来源于stack exchange,提问作者John Gorter
相关产品推荐
相关产品推荐

