公共API中属性移至基类是否为破坏性变更?跨版本运行报错求助
.NET跨版本动态加载第三方程序集的成员绑定问题
场景说明
我使用的第三方.NET Framework程序集存在两个版本,我的代码基于.NET 8,编译时依赖V2.0.0版本,运行时动态加载对应版本。
V2.0.0版本代码
public class A { public int P2 { get; set; } } public class B : A { public int P1 { get; set; } }
V1.0.0版本实际代码(最初误判,后修正)
public class B { public int P1 { get; set; } public int P2 { get; set;} }
我的调用代码
public static void Main() { var b = new B(); b.P2 = 3; }
问题与疑问
运行时加载V1.0.0版本时,访问b.P2操作失败。我原本认为P2是B的公共API,其定义位置不应该影响调用,但实际编译后的代码会绑定成员定义所在的类——即使通过派生类访问。
目前如果针对不同版本分别编译,会引发反向兼容问题,是否存在无需维护两个应用版本的解决方案?
另外查阅资料得知:将成员从基类移至派生类属于破坏性变更,而将成员移至基类、添加无抽象/虚成员的基类是兼容变更。那如果我编译时基于V1.0.0版本,运行时加载V2.0.0版本是否可以正常工作?
内容的提问来源于stack exchange,提问作者adrianm
相关产品推荐
相关产品推荐

