Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中对旧COM对象的向后兼容性支持?_C#_Visual Studio - Fatal编程技术网

C#中对旧COM对象的向后兼容性支持?

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()的定义,并且没有 扩展方法…` 有没有什么方法可以解决这个问题,而不用注释掉引用这个不存在的方法的

我的C#项目正在引用公司“HelloWorld”的COM对象,该公司的版本为2,包含两个方法的定义
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对象。但是帮你的最终用户一个忙,不要给他一根绳子来吊死自己。