TeamCity Docker运行.NET 7测试遇MSB1021日志实例创建错误
核心原因
你遇到的MSB1021错误本质是:TeamCity自动注入的TeamCity.MSBuild.Logger.dll是基于**.NET Framework**开发的日志程序集,而你使用的mcr.microsoft.com/dotnet/sdk:7.0镜像仅包含.NET 7(跨平台的.NET Core后续版本)运行时,完全不支持.NET Framework程序集的加载——哪怕路径映射正确,容器内也没有能运行该日志程序集的环境,因此无法创建日志器实例。
可行解决方案
1. 改用Command Line运行器执行测试
放弃默认的.NET运行器,改用TeamCity的Command Line运行器手动执行dotnet test命令。这样TeamCity不会自动添加依赖.NET Framework的日志器参数,转而通过捕获控制台输出的TeamCity服务消息获取测试结果。
命令示例:
dotnet test /opt/buildagent/work/e6d03f2b6a0fbca2/MyProject.Tests/MyProject.Tests.csproj --framework net7.0 --configuration Release --logger "console;verbosity=normal"
2. 禁用.NET运行器的自动日志器注入
如果坚持使用.NET运行器,可在构建步骤的高级设置中找到“MSBuild logger”相关选项,取消自动注入配置;也可以通过设置环境变量TEAMCITY_DISABLE_MSBUILD_LOGGER=true,阻止TeamCity添加该日志器参数。
3. 更换含.NET Framework的镜像(仅Windows环境适用)
若你的TeamCity构建服务器是Windows系统,可改用包含.NET Framework的.NET SDK镜像(如mcr.microsoft.com/dotnet/sdk:7.0-windowsservercore-ltsc2022),这类镜像同时兼容.NET 7和.NET Framework环境,能正常加载TeamCity的日志程序集。注意Linux环境下此方案不可行,因为.NET Framework不支持Linux。
内容的提问来源于stack exchange,提问作者Sam

