使用MSBuild在Docker中构建VS解决方案遇编译器服务器错误,求解决方法
解决Docker中MSBuild构建时System.Text.Json源生成器MVID不匹配问题
这个错误是因为NuGet缓存里存在不同版本的System.Text.Json分析器/源生成器程序集,加载时模块版本标识符(MVID)不匹配,Docker构建环境中缓存的旧版本和项目依赖的新版本发生了冲突。以下是具体解决办法:
清理NuGet缓存:在Docker构建流程中加入清理NuGet缓存的步骤,避免旧版本程序集残留。执行命令:
dotnet nuget locals all --clear或者直接删除容器内System.Text.Json的NuGet缓存目录:
Remove-Item -Recurse -Force C:\Users\ContainerAdministrator\.nuget\packages\system.text.json -ErrorAction SilentlyContinue统一System.Text.Json版本:检查解决方案中所有项目的System.Text.Json包版本,确保全部使用同一版本(比如统一升级到6.0.5或降级到6.0.0),避免跨版本依赖引发冲突。可以直接编辑项目文件(.csproj)修改版本号,或者通过NuGet包管理器批量调整。
禁用编译器服务器:如果上述方法无效,可以临时禁用Roslyn编译器服务器,避免复用已加载的冲突程序集。在MSBuild命令中添加参数:
msbuild /p:UseSharedCompilation=false YourSolution.sln也可以在项目文件中添加以下属性:
<PropertyGroup> <UseSharedCompilation>false</UseSharedCompilation> </PropertyGroup>更新Docker镜像:确保使用的.NET SDK Docker镜像为对应版本的最新版,避免镜像自带的旧依赖和项目冲突。比如使用.NET 6 SDK时,拉取
mcr.microsoft.com/dotnet/sdk:6.0的最新镜像。
内容的提问来源于stack exchange,提问作者Sitecoredev
相关产品推荐
相关产品推荐

