Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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
将VB6应用程序转换为.NET的策略_.net_Vb.net_Vb6 Migration - Fatal编程技术网

将VB6应用程序转换为.NET的策略

将VB6应用程序转换为.NET的策略,.net,vb.net,vb6-migration,.net,Vb.net,Vb6 Migration,一次开始将表单转换为.NET表单,然后通过COM互操作从VB6应用程序调用,这是一个好主意 这样,在过程结束时,您只需将VB6应用程序的“shell”转换为一个新的.NET应用程序,您的所有表单都可以进入.NET 有更好的策略吗? < P>如果是我,我就撕下创可贴。我认为在应用程序中使用中间状态[.NET Forms and COM interop]没有任何好处,因为它只会增加不必要的复杂性。我们也有一个VB6应用程序正在移植到.NET,我们使用COM interop策略。所有新功能都可以在.N

一次开始将表单转换为.NET表单,然后通过COM互操作从VB6应用程序调用,这是一个好主意

这样,在过程结束时,您只需将VB6应用程序的“shell”转换为一个新的.NET应用程序,您的所有表单都可以进入.NET


有更好的策略吗?

< P>如果是我,我就撕下创可贴。我认为在应用程序中使用中间状态[.NET Forms and COM interop]没有任何好处,因为它只会增加不必要的复杂性。

我们也有一个VB6应用程序正在移植到.NET,我们使用COM interop策略。所有新功能都可以在.NET中实现,只有GUI的东西仍然是VB;同时,我们可以独立开发一个新的GUI

如果您还不知道这一点,您可以使用免注册COM互操作进行COM互操作,而无需使用注册表(因为这会给我们带来一些问题):


您描述的零碎方法将产生额外的工作,因为您将试图使VB6和.Net代码共存,这在任何方面都充满了问题,但最简单的应用程序除外。在这条路上的某个地方,你很可能会被一个可能会阻碍表演的陷阱绊倒

我建议采用以下方法(基于将600000行VB6应用程序成功迁移到.Net):

确保现有VB6代码库的版本控制和标签正确。 为VB6代码库编写回归测试,最好是自动化测试。 采用已知的VB6代码标签基线,并将其作为单个实体迁移到.Net。您的客户继续使用VB6版本。 在迁移的代码上运行回归测试。 当所有测试都通过时,将自采用原始VB6基线以来发生的任何VB6更改应用于.Net代码。
交付给UAT,然后直播。

关于转换策略有很多建议

  • 看看这里的其他问题
  • 我强烈推荐不同的转换策略
  • 考虑商业迁移工具,尤其是在开发人员时间不足的情况下。
    • (转换为c#和vb.net)
    • (转换为vb.net)
    • 而且,我以前从未听说过,在一次编辑中建议(从vb.net转换为c#)

您的系统会在较长时间内同时使用一个、另一个或两个数据模型,一次一个表进行大型复杂数据转换吗?显然,这是在自找麻烦和麻烦。大型数据转换的最佳实践是,在尽可能短的中断时间内使整个数据模型达到其所需的最终状态。同样的推理也适用于大规模代码转换。把它们零碎地重复和延长一段时间是在增加劳动力成本和技术风险方面自找麻烦

在我看来,更好的方法是为.NET代码制定最终状态开发和体系结构标准,然后投资一个流程,帮助您以符合这些标准的方式高效地重写系统,并准确地保留遗留业务规则和功能行为。长时间的过渡和复杂的混合/中间解决方案充其量只是权宜之计,最坏的情况是会导致业务问题和项目失败——应该避免。更好的方法将允许您以内部一致、独立且格式良好的方式将遗留软件交付到新平台。此外,以更少、更大的片段交付迁移将比许多小片段更高效、破坏性更小

使这种方法可行的关键是使用下一代VB6/COM/ASP到.NET工具,这些工具允许您迭代校准、自定义和验证自动重写过程,以平衡自动转换和手动工作。中的工具是专门为实现此方法而设计的。我们称之为“工具辅助重写”。我们在几个大型迁移项目中使用了这种方法,包括将VB6/COM的120万LOC的应用程序组合升级到重新设计的C#/.NET


免责声明:我为伟大的迁移工作。

在VB6中,您是否通过COM公开任何复杂类型?因为VB6和.Net之间可能不兼容。例如,如果您在VB6中使用MSXML,则需要在.Net中将其替换为System.Xml;只有在COM层中不使用MSXML类型时,这才有效。ADO也是一样。我仍在筛选代码,但我想我会说不。我将VB6放入VS2005向导,它产生了数千行未在.NET中编译的代码,因此这可能不是一个选项。不过,还有另一个服务可以将VB6代码转换为C。SELISE Phoenix为使用该服务的公司提供服务(全功能转换代码)和转换后支持。但我需要该应用程序在迁移过程中为其用户完美运行。什么,您正在迁移实时系统吗?部署新的未经测试的.net应用程序是不可行的。关键错误的风险太大了。这种变化必须更加渐进,克雷格是对的。一位微软内部人士发布了关于他如何试图帮助一些公司通过大爆炸的方式迁移到.Net,而许多项目因为任务太大而失败。有些人建议首先移植GUI。为什么最后才移植GUI?实际上,我们的想法是在第一步只移植极其复杂的应用程序的某些部分,并使用移植的程序逻辑创建silverlight应用程序。VB6应用程序将保留一段时间,但SL应用程序可以使用所有新开发的部件。我了解到在VB6中使用带有reg free interop的.NET组件时存在问题。您对Vb6和.NET之间的Reg Free Com互操作有任何问题吗?该应用程序不久前已发布给我们的客户,