.net NET和VB6:互操作是一种可行的开发策略吗?

.net NET和VB6:互操作是一种可行的开发策略吗?,.net,vb6,interop,.net,Vb6,Interop,VB6和.NET之间的互操作是可行的开发策略吗 我正在开发一个VB6应用程序,它可以与一些.NET程序集进行互操作,但是“冷启动”和其他内聚问题的结合会导致不平滑的结果 VB6和.NET之间的互操作是可行的开发策略吗 仅在存在无法迁移的非托管代码的情况下。但是在VB6上编写新代码是不可行的。EDIT-缩小了我的答案 可能吗?当然可以 我可以推荐它吗?当然不是 通常的情况(我已经多次遇到)是您在五年或十年前用VB6编写了一些组件。作者已经离开了公司,虽然应用程序正在解决的问题相当简单,也很容易理解

VB6和.NET之间的互操作是可行的开发策略吗

我正在开发一个VB6应用程序,它可以与一些.NET程序集进行互操作,但是“冷启动”和其他内聚问题的结合会导致不平滑的结果

VB6和.NET之间的互操作是可行的开发策略吗


仅在存在无法迁移的非托管代码的情况下。但是在VB6上编写新代码是不可行的。

EDIT-缩小了我的答案

可能吗?当然可以

我可以推荐它吗?当然不是

通常的情况(我已经多次遇到)是您在五年或十年前用VB6编写了一些组件。作者已经离开了公司,虽然应用程序正在解决的问题相当简单,也很容易理解,但应用程序本身却不是;公司里没有人真正知道如何维护它和/或它写得很差,一开始很难维护

如果您的情况是这样的,那么我建议您使用一个端口,尤其是当您的公司缺少VB6资源并且拥有大量的.NET资源时。正如MarkJ所说,这不一定是一个普遍的观点,但根据我自己的经验,这听起来是真的

在以下网址发表MS帖子:-

微软表示,从头开始重写通常比扩展或自动迁移(使用链接的工具)成本更高。我当然使用了VisualBasic升级向导来获得一个起点,尽管我们通常是移植到C#而不是VB.NET。这是一个很好的开始——特别是如果你喜欢VB.NET

最后:-

通常情况下,我们只建议在少数情况下进行[重写],包括:

  • 原始应用程序有许多 由坏消息引起的问题 架构、设计和/或编码 实践。症状可能包括身体不适 可扩展性或性能,用户体验差 界面和应用中的困难 维护代码
  • 原著 应用程序不再与 业务的需求在很大程度上 地区。需要进行核心变更,例如:。 必须提供用户界面 通过浏览器而不是作为智能 客户
  • 公司已经有了 在.NET上获得的重要技能 其他应用程序和应用程序 很好地理解和比较 小的
  • 源代码不再是 适用于本产品的重要部分 应用程序
这些都是很好的观点,但是如果你不能在你的项目中发现其中至少一个问题——应用程序运行良好且可维护,你需要做的更改很小,公司有大量的VB6资源,你可以访问源代码——我可能会问你为什么要迁移到.NET。在我从事的每个相关项目中,我们都会遇到前三个问题中的两个(如果不是全部三个的话)

如果移植根本不是一个选项,那么我们需要更多信息。它是什么样的应用程序?VB6在做什么?网络在做什么

VB6和.NET之间的互操作是可行的开发策略吗

如果您强调“战略”一词,那么我必须强烈建议,“不!”战略将描述您的正常或预期攻击计划,而将.Net与vb6混合并不是在这种情况下取得成功的秘诀。这有几个原因,包括找到对旧的vb6工具的支持,vb6运行时不再为我的Microsoft提供服务的事实,随着时间的推移,找到训练有素的vb6开发人员的难度越来越大,需要找到了解这两种平台的开发人员。。。我可以继续说下去。关键是,你不想计划在大多数时候都这样做

但让我们把你的措辞稍微修改一下:

VB6和.NET之间的互操作是可行的开发选项吗

啊,那更好。当您发现自己正在查看一些现有的vb6代码,或者您有一位经验丰富的vb6程序员需要一些时间才能熟练使用.Net时,在有限的时间内,这是一个可行的选择,可以解决当前的问题。如果您可以将它与.NET4.0结合使用,这一点尤其正确,因为.NET4.0具有一些使这一点更容易实现的功能


只是不要把它作为整体策略的一部分。

我认为在某些情况下,使用VB6 COM组件的.NET应用程序是可行的

例如,我有一个.NET应用程序,需要对Office文档进行一些相当复杂的操作。这在.NET中是很难实现的,因为如果您在发布引用时没有非常小心,Office应用程序将无法按中所述退出


在本例中,一个实用的解决方案是创建一个VB6组件,该组件封装了所有Office操作,向调用方公开了一个简化的API,而不使用任何Office对象模型

我们有一个大型项目,我们在5年前就开始向其添加.NET功能,而且一直运行得很好。最初,我们只是添加非可视组件,慢慢地将业务逻辑移动到.NET中,原因有很多:

  • VB6有一些测试套件,但它实际上是不可测试的(当然不是通过CI)
  • NET有很多现成的功能,在VB6中很难实现
  • 计划是在我们有时间时移植到.NET
  • NET组件(用C#编写)非常成功,我们开始用C#编写可视化组件(使用和),甚至还有WPF组件。在这里,事情确实变得有点粗略,有时有三个消息泵,来自三个技术堆栈的组件会导致古怪(组件从屏幕上消失或没有正确地重新压缩)和残酷的黑客(向特定组件发送消息,在这里和那里进行LockWindowUpdate)来让事情正常工作。然而,对于我们大多数客户认为是书面形式的应用程序