.NET 5测试项目启动AppSelfHostBase时出现InplaceStringBuilder加载错误
问题根因
该异常由Microsoft.Extensions.Primitives包的版本冲突导致:
- ServiceStack 5.x版本基于.NET Core 3.x生态开发,内部依赖3.x版本的
Microsoft.Extensions.Primitives,调用了该版本中存在的Microsoft.Extensions.Primitives.InplaceStringBuilder类 - 你安装的
Microsoft.Extensions.Configuration.UserSecrets5.0.0版本依赖5.0版的Microsoft.Extensions.Primitives,而InplaceStringBuilder类在该版本中已经被官方移除 - 包依赖解析时优先使用了更高版本的
Microsoft.Extensions.Primitives,ServiceStack运行时找不到对应的类就抛出了TypeLoadException
你遇到的Configure()方法断点无法命中,是因为异常在AppHost实例初始化阶段就被抛出,还未执行到Configure()方法的逻辑。
解决方案
可根据你的项目需求选择任意一种方案:
方案1:升级ServiceStack到6.x及以上版本
ServiceStack从6.0版本开始完整适配.NET 5+生态,已经移除了对InplaceStringBuilder的调用,不存在版本冲突问题。修改测试项目的包引用即可:
<PackageReference Include="ServiceStack" Version="6.*" /> <PackageReference Include="ServiceStack.Kestrel" Version="6.*" />
方案2:降级用户机密包到3.1.x版本
如果你的项目必须保留使用ServiceStack 5.x版本,就将Microsoft.Extensions.Configuration.UserSecrets降级到和ServiceStack依赖匹配的3.1.x版本:
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.32" />
修改完成后,清理解决方案的bin、obj文件夹,重新构建后再运行测试即可恢复正常。
内容的提问来源于stack exchange,提问作者Guerrilla
相关产品推荐
相关产品推荐

