【问题标题】:Migration of a VB6 applicationVB6 应用程序的迁移
【发布时间】:2010-05-11 15:57:36
【问题描述】:

将 VB6 应用程序迁移到 .NET 平台几乎就像是重写,无论是 VB.NET 还是 C#。与 .NET 平台相比,您是否认为在 Java 平台上做这件事需要更多的努力,因为它无论如何都是重写的?请分享您的想法!

【问题讨论】:

  • 团队中有很多java开发人员,目前有一个项目正在Java平台上实现。但是他们有一个旧的 VB6 应用程序,他们希望将其迁移到一些更新的技术。它使用一些带有宏的 VBA 和 word 模板,但他们希望将其摆脱为 PDF 解决方案。
  • 不是真的!我的问题是关于将 vb6 应用程序迁移到 Java 的优缺点,而不是 .NET。
  • @Brian,这不是重复的。每个应用程序都是不同的,每个开发团队都是不同的。这些事情有很大的不同。

标签: c# java vb.net vb6 vb6-migration


【解决方案1】:

没有冒犯,但你错了。移植到 .Net 通常比重写要容易

这是来自Microsoft UK的官方建议:

对 .NET 进行完全重写要比转换成本高得多,而且很难做好[比转换]……我们只在少数情况下推荐这种方法。

来自一位咨询重写的微软人员blog post

我在 .NET 早期工作过的许多公司首先考虑重写,部分原因是在迁移到 .NET 的同时,他们强烈希望改进底层架构和代码结构。不幸的是,其中许多项目遇到了困难,有几个项目从未完成。他们试图解决的问题太大了

我建议按此顺序执行以下两个步骤。

  1. 写下迁移或重写的原因。 它会带来什么好处? 好处可能只是让开发团队高兴——这甚至可能是一个足够好的理由,我不知道。确保您知道,并且您的经理/用户同意。
  2. 查看 Microsoft UK advicescreencast,解释 .Net 迁移的 5 个基本选项。决定哪个是最好的。它可能正在重写,但请睁大眼睛进入它。

回答您的实际问题:在 .Net 或 Java 中完全重写会更容易吗? mainly depends on 你的团队最了解的那个。它还取决于应用程序是否与 COM 交互,就像 SLaks 所说的那样。

【讨论】:

  • 你的标志很漂亮,哈哈哈 :)
  • @BhejaFry 谢谢,不久前贴出徽标,我很高兴它终于得到了赞赏!
  • 谢谢马克。您发布的上述链接中提到的完全重写的原因对我们的情况完全有效。但作为 .NET 顾问,我需要说服经理,最好将其移植到 .NET 平台,而不是 Java 平台。他有一些内部 Java 开发人员,所以他认为他可以省钱。我仍然需要查看现有的 VB6 代码,以评估此应用程序的 COM 依赖性。但是,就像其他人所说的 COM 依赖一样,您确实有一些优点。
  • @WinFXGuy 大概这个组织实际上支付其内部 Java 开发人员 - 他们的工作时间不是免费的。告诉经理,用 Java 重写可能需要比移植到 .NET 更多的开发时间,也就是说,它可能会更便宜。他需要决定要为获得 Java 应用程序而不是 .Net 支付多少额外费用。最重要的是,他需要确定他为什么要委托端口/重写。对企业有什么好处?
【解决方案2】:

重写 VB6 应用程序的工作不仅仅是您所针对的语言的问题。 VB 应用程序通常依赖于 COM 对象和某些可能没有等效的 VB 特定库方法在 Java 中 - 但在 .NET 中可能具有一些可移植性。

除非您愿意放弃项目的所有依赖项,否则您可能会发现 .NET 是一个更容易重写的目标,尤其是在您需要保留项目的某些行为时从库或其他依赖项派生的现有应用程序。

另一个考虑因素是您的团队最熟悉哪个平台 - 如果您有很多 Java 专业知识但很少或没有 .NET 专业知识,那么 Java 可能是您的不错选择。

【讨论】:

  • 我认为,COM 本身的问题与其说是关于 COM 本身的问题,不如说是另一个框架中是否存在等效组件的问题。 COM只是组件技术,通常由VB6代码粘合在一起的预打包代码的功能是一个更大的问题。不要将组件视为“依赖项”。这有点像将汽车的引擎称为“依赖项”。
  • @Bob 我认为这就是 LBushkin 的意思:方法/组件是否在 Java 中具有等价物,即它与功能有关。顺便说一句-您是否曾经用不同类型的发动机实际更换过汽车发动机?说汽油->电动还是汽油->柴油?当然可能,但我怀疑相当昂贵。
  • @Bob Reimersma:确实有两个问题需要解决 - 第一个是代码所依赖的 COM 组件(如果有的话),以及这些组件的作用。无论采用何种技术,软件组件很少能 100% 互换,如果将一个组件换成另一个组件,可能会导致最终用户的行为不同。这种移植/重写工作的一部分是确定如果选择不同的平台,系统的最终行为会是什么。
  • @MarkJ & LBushkin 也许你只是比我更清楚地表达了我的观点。我希望建议更改组件套件可以让您从原始程序中丢弃一些最繁琐的代码:使用这些组件。
【解决方案3】:

有一些工具可以从 VB6 迁移到 VB .Net,包括 Visual Studio 中内置的工具。 This tool 将 VB6 迁移到 C#。无论您使用什么工具,您仍然需要对工具输出的代码进行大量手动工作,但这可能比完全重写 java 少。

根据您现有应用程序的架构以及代码的结构,您可能会决定最好还是完全重新设计和重写它,在这种情况下,.Net 和 java 之间可能没有太多选择。

【讨论】:

  • 那个工具听起来很弱。据我所知,查看拥有领先迁移工具的 Artinsoft.com 或 VBMigration.com。他们都声称对迁移的代码进行了最少的手动工作,而且肯定远远少于重写。哦,对重写要小心。 stackoverflow.com/questions/2812224/…
  • 我使用过 Netcoole 工具和 Artinsoft。我同意Netcoole很弱,但它很便宜!您将不得不对输出进行大量手动工作。除了工具之外,Artinsoft 还提供出色的迁移服务——价格要贵得多,但您不必自己进行任何迁移工作。 Artinsoft 还编写了 Visual Studio 中提供的升级向导,这是他们主要工具的精简版。
  • 但是,如果应用程序使用大量第三方 COM 对象,最好还是坚持使用 .NET
【解决方案4】:

不仅要减少迁移期间的总工作量,还要减少迁移后的维护成本,这一点很重要。许多因素推动 TCO,但在所有条件相同的情况下,我认为 .NET 工具、社区、框架和 C# 语言在开发人员生产力、操作可管理性和性能方面可以达到或击败 Java——假设您的目标是 Windows 操作系统。

我也不认为易于保持 COM 应该是决定因素。事实上,我认为将 VB6 迁移到 .NET 但在不必这样做时保留 COM 会破坏首先进行 VB6 迁移的关键目的:通过迁移到支持良好且可行的平台来降低开发成本和风险。我会告诉你原因:

  • 大多数流行的 COM 库和 与 VB6 一起使用的控件具有 多年未进化;许多 较小的供应商已经消失 或者如果他们仍然支持他们的 商品,他们现在还提供新的和 改进的 .NET 版本。

  • 迁移后使用旧 COM 意味着与额外的生活 调试方面的复杂性, 构建和部署。还要注意 COM 组件并不真正“说话”.NET (即他们不使用 .NET 类型和 约定),因此它们通常与 .NET 一起使用 导致增加的复杂性 编码和设计。

  • 还有几个 此规则的保留和例外情况 .NET 替代品不是 总是最好的选择,但总的来说, 迁移团队将能够找到 至少一个 .NET 替换选项 对于他们使用的几乎每个 COM 组件。 花时间深思熟虑 评估、选择和升级到一个 这些选择将在之后得到回报 迁移。

  • 你不会想要互操作任何东西 那是您计划迁移的VB6。互操作您自己的代码将导致更长的时间, 复杂的过渡,通常 需要回溯和 返工/重新测试已经迁移 代码。显然这不是最 高效易懂的升级 小路。

关于必须“在输出上进行大量手动工作”的另一点。 Great Migrations 产品是一种新的可编程迁移工具。它旨在帮助迁移团队逐步提高生成代码的质量,从而减少完成迁移项目所需的手动工作。这包括使翻译更正确,处理复杂的多 VBP 迁移,以及自动重组 VB6/COM 代码以使用 .NET 组件。如果 VB6 代码库非常大、变化频繁,并且在迁移过程中进行了重大的重新设计和清理,这些功能特别有用。这是一种我们称之为工具辅助重写的敏捷迁移方法。

免责声明:我为 Great Migrations 工作。

【讨论】:

    【解决方案5】:

    如果应用程序使用 COM,用 .Net 重写它比用 Java 容易得多。否则,移植到 .Net 可能会更容易一些。

    如需更具体的答案,请提供有关您的应用程序的更多详细信息。

    【讨论】:

      【解决方案6】:

      您也可以使用 Jabaco,它是一个 Java 字节码编译器,它有自己的 IDE 和与 VB6 非常相似的语法(几乎相同)。
      您可以在以下位置找到更多信息:
      http://www.jabaco.org/
      http://www.jabaco.org/board/

      【讨论】:

        【解决方案7】:

        使用迁移工具(例如 ArtInSoft)将其迁移到 .NET。

        【讨论】:

          【解决方案8】:

          您可以使用内置的 VS 迁移到 VB.Net 来迁移 VB 6 应用程序。试着看看这是否对你有帮助。如果您正在考虑将 VB 6 迁移到 C#,那么我还会推荐 ScaleOvenStove 用户推荐的内容。

          【讨论】:

            猜你喜欢
            • 2015-06-14
            • 2016-04-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多