.NET8.0项目SOAP客户端报错:System.Net.Security.ProtectionLevel未找到
程序集版本冲突:.NET 8已自带
System.Net.Security程序集(版本8.0.0.0),手动安装的NuGet包(4.3.2)与框架自带版本不一致,导致编译器无法正确解析类型映射。建议卸载手动安装的System.Net.SecurityNuGet包,直接使用框架内置的程序集。生成代码的命名空间错误:
System.ServiceModel.MessageContractAttribute、MessageHeaderAttribute等特性的ProtectionLevel参数,实际要求的是System.ServiceModel.ProtectionLevel枚举,而非System.Net.Security.ProtectionLevel。检查生成的代码,将所有特性参数中的System.Net.Security.ProtectionLevel替换为System.ServiceModel.ProtectionLevel,即可解决类型不匹配问题。WCF相关包版本不兼容:若项目引用了针对.NET Framework的WCF旧包(如
System.ServiceModel.*的低版本NuGet包),会导致特性参数类型与.NET 8的内置类型冲突。确保使用适配.NET 8的WCF包,比如System.ServiceModel.Http、System.ServiceModel.Primitives的8.0.x版本。编译器缓存或项目状态异常:清理项目的
bin、obj文件夹,重启Visual Studio,然后重新生成项目,排除缓存导致的识别错误。代码生成工具版本问题:使用的WSDL生成工具(如
svcutil、Visual Studio Connected Service)版本过旧,不兼容.NET 8,导致生成代码时错误引用了错误的命名空间。尝试使用.NET 8版本的svcutil工具(通过dotnet tool install --global dotnet-svcutil安装)重新生成客户端代码。
内容的提问来源于stack exchange,提问作者Pieter B

