You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加WCF服务引用生成的Reference.cs引用Microsoft.CodeDom而非System.CodeDom

问题根因

这是不同目标框架下WCF代理类生成工具的正常差异,不属于异常生成:

  • .NET Framework 4.8项目添加WCF服务引用时,VS调用传统的SvcUtil工具生成代码,依赖System.Runtime.Serialization程序集,因此生成的标记属性为[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
  • .NET 5属于.NET Core技术栈,VS会调用专门适配跨平台.NET的Microsoft.Tools.ServiceModel.Svcutil工具生成代理类,因此会带上对应工具的GeneratedCode标记,你看到的预览版本号是VS2019 16.11.x版本内置的工具版本,并非你项目引用了预览版依赖包。

解决方案

1. 无需安装Microsoft.CodeDom相关NuGet包

你找到的Microsoft.CodeDom.Providers.DotNetCompilerPlatform是仅面向.NET Framework的包,本身就不兼容.NET 5,无需安装。
Microsoft.CodeDom.Compiler.GeneratedCodeAttribute已经内置在.NET 5的基础框架中,只需要确认你的项目没有误删默认的框架引用即可正常编译。如果仍然提示找不到该类型,直接在项目.csproj文件中添加如下配置即可:

<ItemGroup>
  <Reference Include="Microsoft.CodeDom" />
</ItemGroup>

2. 替换预览版生成工具

如果不想使用内置的预览版工具生成代码,可以手动安装稳定版的dotnet-svcutil全局工具生成代理类:

  • 打开命令行执行dotnet tool install --global dotnet-svcutil安装稳定版工具
  • 进入项目目录执行dotnet-svcutil 你的WCF服务元数据地址生成代理类
  • 生成的代码会标记稳定版工具版本,不会出现预览版号

3. 兼容旧版生成格式

如果你需要和.NET Framework项目的生成格式完全一致,可以直接将.NET Framework项目中生成的Reference.cs文件复制到.NET 5项目中,补充安装以下两个NuGet包即可正常运行:

  • System.ServiceModel.Http
  • System.ServiceModel.Primitives

内容的提问来源于stack exchange,提问作者Cícero Neves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:24:03