将.NET 5类库的UserControl加载到.NET Framework 4.8项目是否可行
核心结论
首先明确:无法直接在.NET Framework项目中加载.NET 5程序集,两者属于完全独立的运行时实现,底层依赖的基础库、运行时环境互不兼容。
报错原因
你遇到的System.Runtime, Version=5.0.0.0加载报错就是最直接的体现:
Could not load file or assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
这个版本的System.Runtime是.NET 5运行时的专属核心程序集,.NET Framework的运行时环境中根本不存在对应版本的依赖,自然无法完成加载。
可行的替代方案
如果需要实现两个项目的控件共享,可以选择以下适配方案:
- 方案1:将共享的UserControl相关逻辑迁移到*.NET Standard 2.0*类库项目。.NET Standard 2.0同时兼容.NET Framework 4.6.1+和.NET 5+,两边项目都可以直接引用或者通过
Assembly.LoadFrom加载该类库生成的程序集,只要你没有用到.NET 5独有的WinForms API就可以正常运行。 - 方案2:将调用方的旧.NET Framework项目也升级到.NET 5+,两个项目运行时一致后就可以正常加载程序集,这是长期来看维护成本最低的解决方案。
- 方案3:如果必须保留两端的运行时版本不变,可以将.NET 5项目的功能封装为进程外COM组件,.NET Framework项目通过COM接口调用。但该方案改造成本极高,还要额外处理UserControl跨进程渲染的问题,非必要不推荐。
内容的提问来源于stack exchange,提问作者maxp
相关产品推荐
相关产品推荐

