【发布时间】:2017-12-13 07:10:01
【问题描述】:
我有一个用 C# .net framework 2.0 创建的 COM 对象,COM 客户端是一个 windows application net framework 4.6.1。 COM 客户端无法实例化 COM 对象,异常是 - 无法转换对象。 通过将COM客户端app.config中的useLegacyV2RuntimeActivationPolicy设置为false,成功实例化COM对象。
你能解释一下吗? 有没有办法在 useLegacyV2RuntimeActivationPolicy 设置为 true 的情况下实例化 COM 对象?
我们从中获取的 COM 对象的代码: https://www.codeproject.com/Articles/35532/C-COM-Object-for-Use-In-JavaScript-HTML-Including
我们将客户端替换为 windows 应用程序。
【问题讨论】:
-
这在很大程度上取决于您的项目细节。很难说没有更多信息/重现代码等。请注意,useLegacyV2RuntimeActivationPolicy 默认值实际上是 false。因此,恕我直言,您应该将 useLegacyV2RuntimeActivationPolicy 保持为 false,而不是更改所有内容以将其设置为 true。您不能只重新编译您的框架 2 组件并面向未来前进吗?
-
当客户端设置 useLegacyV2RuntimeActivationPolicy="true" 时,我在 4.6.1 上重新编译了 com 对象,发生相同的错误转换
-
如果一切都是用4.6.1编译的,你根本不需要useLegacyV2RuntimeActivationPolicy。
-
嗯,这些东西加起来没有任何意义。停止使用 COM,在这种情况下它根本没有用。不要添加对类型库的引用,而是添加对程序集的引用。并使用
new关键字来创建实例,就像您总是使用 .NET 类一样。类库是针对 2.0 还是 4.6.1 编译的并不重要。 -
这是一个 POC 来解决我们在产品中遇到的问题。我们的产品使用来自第三方的 com 对象,目前我们发现如果我们在 32 位上编译或产品,我们不会在我们的产品是 WPF 应用程序的情况下,使用 useLegacyV2RuntimeActivationPolicy 的配置设置为 true