System.Text.Json版本冲突问题咨询:含Azure Function的.NET解决方案构建异常与警告排查
首先得说清楚你遇到问题的核心:你的netstandard2.1类库和netcoreapp3.1的Azure Functions项目之间,存在.NET Core SDK依赖解析的版本冲突,而你手动安装System.Text.Json 4.7.2的操作,其实是绕开了问题但没从根源解决,所以才会出现那个“任意选择版本”的警告。
先分析你的操作问题
netstandard2.1本身只是API标准定义,并不自带System.Text.Json的具体实现;而netcoreapp3.1已经内置了System.Text.Json(对应版本和你安装的4.7.2非常接近)。当你在类库中显式安装System.Text.Json包时,相当于给项目引入了一个额外的版本,和Azure Functions项目依赖的内置版本产生了冲突——编译器找不到明确的优先级,只能抛出警告随便选一个,虽然运行时能工作,但依赖关系变得混乱了。
正确的解决步骤
1. 移除类库中手动安装的System.Text.Json包
先把你在netstandard2.1类库中装的System.Text.Json 4.7.2删掉:
# 切换到类库项目目录执行 dotnet remove package System.Text.Json
或者在Visual Studio的NuGet包管理器里直接卸载它。
2. 用统一版本绑定解决依赖冲突
在解决方案根目录新建(如果没有的话)Directory.Build.props文件,添加以下配置,强制所有项目使用一致的依赖版本:
<Project> <PropertyGroup> <!-- 自动生成绑定重定向 --> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup> <ItemGroup> <!-- 统一System.Text.Json和System.Runtime的版本 --> <PackageReference Update="System.Text.Json" Version="4.7.2" /> <PackageReference Update="System.Runtime" Version="4.3.0" /> </ItemGroup> </Project>
这样做的目的是告诉NuGet,所有项目都统一用指定版本的依赖,从根源上避免版本不一致的问题。
3. 验证Azure Functions项目的配置
确保你的Azure Functions项目确实是目标netcoreapp3.1,检查项目文件(.csproj):
<TargetFramework>netcoreapp3.1</TargetFramework> <AzureFunctionsVersion>v3</AzureFunctionsVersion>
Azure Functions v3和netcoreapp3.1是配套的,这个配置没问题。
4. 清理并重新构建
最后清理掉旧的构建文件,重新恢复依赖并构建:
dotnet clean dotnet restore dotnet build
这样操作后,既解决了最初的编译错误,也能消除那个版本冲突的警告,依赖关系也更清晰。
内容的提问来源于stack exchange,提问作者mnj

