C#中对旧COM对象的向后兼容性支持?
我的C#项目正在引用公司“HelloWorld”的COM对象,该公司的版本为2,包含两个方法的定义C#中对旧COM对象的向后兼容性支持?,c#,visual-studio,C#,Visual Studio,我的C#项目正在引用公司“HelloWorld”的COM对象,该公司的版本为2,包含两个方法的定义HelloWorld.Foo()和HelloWorld.Bar() 如果我随后取消注册这个COM组件,并注册“HelloWorld”版本1,它只包含HelloWorld.Foo()(而不是HelloWorld.Bar()),显然该项目将不会编译,因为它将沿着 HelloWorldApi不包含“Bar()的定义,并且没有 扩展方法…` 有没有什么方法可以解决这个问题,而不用注释掉引用这个不存在的方法的
HelloWorld.Foo()
和HelloWorld.Bar()
如果我随后取消注册这个COM组件,并注册“HelloWorld”版本1,它只包含HelloWorld.Foo()
(而不是HelloWorld.Bar()
),显然该项目将不会编译,因为它将沿着
HelloWorldApi不包含“Bar()的定义,并且没有
扩展方法…`
有没有什么方法可以解决这个问题,而不用注释掉引用这个不存在的方法的所有代码?这是一个非常奇怪的神话,在COM中比在C#中更容易做到这一点。恰恰相反,一个缺少的方法很可能会导致程序崩溃,并导致严重的接口错误。更糟糕的是,一个完全不可诊断的AccessViolationException。或者更糟,更糟的是,调用了完全错误的方法却没有得到异常。您可以在C#中使用dynamic关键字来愚弄编译器。这也适用于COM对象。但请帮你的最终用户一个忙,不要给他一根绳子来吊死自己。这是一个非常奇怪的神话,在COM中比在C#中更容易做到这一点。恰恰相反,一个缺少的方法很可能会导致程序崩溃,并导致严重的接口错误。更糟糕的是,一个完全不可诊断的AccessViolationException。或者更糟,更糟的是,调用了完全错误的方法却没有得到异常。您可以在C#中使用dynamic关键字来愚弄编译器。这也适用于COM对象。但是帮你的最终用户一个忙,不要给他一根绳子来吊死自己。