能否在.NET 5和.NET Framework项目中复用同一C#类?
核心问题解答
首先明确:.NET 5 与 .NET Framework 4.7.2 运行时不兼容,无法直接互相引用项目,以下是3种无冗余代码的实现方案:
方案1:使用.NET Standard 2.0公共类库(最推荐)
.NET Standard 2.0 原生同时支持 .NET Framework 4.6.1+ 和 .NET Core 2.0+ 以及 .NET 5/6/7/8 所有后续版本,是跨框架复用代码的官方标准方案:
- 解决方案中新建**类库(.NET Standard)**项目,目标框架选择.NET Standard 2.0
- 将所有公共模型类(如
ExampleData)迁移到该类库中,若模型使用了Newtonsoft.Json等序列化特性,在该类库中安装对应兼容版本的NuGet包即可 - .NET Framework 4.7.2项目和.NET 5项目同时引用这个.NET Standard类库,删除两边重复定义的模型类即可
该方案是编译级别的代码复用,无需修改现有业务逻辑,后续维护公共模型只需要修改一处。
方案2:使用共享项目(Shared Project)
如果不想多维护一个独立发布的类库,可以用共享项目实现源码级复用:
- 解决方案中新建共享项目,将公共模型类存入该项目
- .NET Framework和.NET 5项目同时添加对该共享项目的引用
- 编译时共享项目的代码会自动嵌入到两个项目的编译结果中,无需重复编写类
该方案适合仅需要共享少量POCO模型、不需要单独打包公共类库的场景。
方案3:文件链接(最小改动方案)
如果不想新增项目,可以用文件链接的方式同步源码:
- 在任意一个项目中编写
ExampleData类的源码 - 另一个项目右键选择「添加 -> 现有项」,找到刚才编写的类文件,点击添加按钮旁边的下拉箭头,选择「添加为链接」
- 两个项目会共用同一份源码文件,修改时两边会自动同步
额外优化建议
你现有.NET 5代码中每次请求都新建HttpClient的写法会导致端口耗尽问题,建议通过依赖注入注入IHttpClientFactory来创建HttpClient实例,降低资源消耗。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

