.NET Core 3.1引用.NET Standard 2.1项目遇System.Web.Services加载错误
问题分析与操作误区
核心误解:.NET Standard并非.NET Framework兼容层
你错误认为迁移到.NET Standard就能让依赖.NET Framework专属组件的类库在.NET Core环境运行,这是关键误区:
-.NET Standard是API规范,而非运行时,本身不包含任何.NET Framework专属实现(比如System.Web.Services这类仅属于.NET Framework的组件)。
-.NET Standard类库能被不同.NET平台引用的前提是,类库依赖的API在目标平台(此处为.NET Core 3.1)有对应实现,但System.Web.Services是.NET Framework独有的,.NET Core/.NET 5+完全未提供该组件的兼容实现。
具体操作问题
- 错误的迁移方式:直接将.NET Framework类库的目标框架改为.NET Standard 2.1,却未移除或替换对
System.Web.Services的依赖。该组件是.NET Framework的专属引用程序集,在.NET Core环境中仅能用于反射查看,无法实际执行,因此才会抛出"Reference assemblies should not be loaded for execution"的错误。 - 忽略平台兼容性检查:迁移前未确认
System.Web.Services是否存在于.NET Standard/.NET Core的API兼容列表中——该组件属于.NET Framework遗留的ASMX相关Web服务技术,.NET Core已放弃对这类技术的支持,转而推荐WCF Core或其他现代Web服务方案。 - 无效的DLL复制操作:即便把
System.Web.Services.dll复制到输出目录也无济于事,因为.NET Core运行时不会加载.NET Framework专属程序集来执行,这类DLL仅能在.NET Framework环境下运行。
可行修正方向
- 替换
System.Web.Services依赖:若DataLoaderLib使用的是ASMX客户端,可改用System.ServiceModel.Http(WCF Core)或直接通过HttpClient调用Web服务。 - 保留.NET Framework类库并启用兼容模式:若无法修改依赖,可将DataLoaderLib保留为.NET Framework 4.8类库,让.NET Core 3.1项目通过**.NET Framework兼容性模式**引用(需确保运行环境装有.NET Framework 4.8),但这只是临时方案,不推荐长期使用。
- 重构DataLoaderLib:移除所有.NET Framework专属API依赖,改用.NET Standard兼容的替代方案,确保类库真正具备跨平台运行能力。
内容的提问来源于stack exchange,提问作者Christopher Townsend
相关产品推荐
相关产品推荐

