将大型ASP.NET VB.NET项目逐步转换为C# - 可行吗?

8

我正在寻找一些逐步将现有的ASP.NET VB.NET项目转换为C#的方法,同时仍能以单个Web应用程序形式部署它(当前每周部署)。

我的想法是只需创建一个新的C# ASP.NET项目,然后慢慢地将页面移动过去,但我从未尝试过这样做并在部署期间将其与另一个ASP.NET项目合并。

(澄清:大型ASP.NET VB.NET项目在VS IDE中绝对是难以处理的…)

有什么想法吗?


您没有标记您的问题。 - chrissie1
真的吗?我在右边看到了4个标签,这些是我在创建问题时打的标签...c#、asp.net、vb.net、conversion。 - Joey
chrissie1:标签现在在左边了(不知道为什么会改变) - Eduardo Molteni
10个回答

5

从业务逻辑开始,逐步扩展到页面。将所有可以封装的内容都封装到C#库中,并将其作为VB.NET站点的引用添加。

一旦您已经将所有后端移植并测试完毕,可以开始逐个处理页面,但我建议在完成所有转换之前不要进行发布。


谢谢。那基本上就是我们一直以来采用的方法。但由于我们每周都要发布到生产环境,我不确定“等待所有内容完成才部署”的部分是否适合我们。 - Joey

4
你可以在App_Code目录下同时保留VB和C#代码。因此,当你有空闲时间转换时,你可以慢慢进行。
我当前在我的App_Code目录中拥有VB.Net和C#代码,并且在我有空闲时间时,我会将其转换为VB.Net代码,或者每当我需要返回到带有VB.Net的页面并进行操作时,我会将其转换为C#。
这很容易,微软甚至让它更好,当他们允许您在同一应用程序中使用VB.NET和C#时。这是他们在整个应用程序制作过程中可以实现的最好的想法之一。
如果您想要在一个目录中添加两个代码目录,请将以下内容添加到Web.config文件中。
<compilation>
<codeSubDirectories>
    <add directoryName="VB_Code"/>
    <add directoryName="CS_Code"/>
</codeSubDirectories>
</compilation>

然后在您的App_Code目录中添加一个名为VB_Code和另一个名为CS_Code的文件夹。然后将所有vb/C#代码放入您的文件夹,就可以了。


3

你是指进行相似的移植吗?我不太明白这样做的意义以及为所有努力所获得的收益。或许可以将任何新功能或重新构建笨重/低效现有逻辑/服务层转换成C#,但对于网页,我不认为这会带来80/20的好处。


没错,我们正在重构并将代码下移至Presenter、Service等。但是如果你以前曾在VS IDE中使用过大型ASP.NET VB.NET项目,你就知道VB.NET会对IDE造成多大的影响。因此,我们正在寻找一个短期解决方案来克服VB.NET的障碍。 - Joey
你好, 我从未使用过vb.net解决方案,但如果网站很大,我无法看出重写为c#是一个短期解决方案。 - redsquare
谢谢您的回复。实际上我并不是在谈论重写。我可以使用SharpDevelop逐页进行实际转换。我更加想知道关于递增部分,如何将两个ASP.NET Web项目合并成一个进行部署。谢谢! - Joey

1

尝试使用#Develop。我认为这是将任何.NET支持的语言转换为任何.NET支持的语言的最佳方法。

其他工具只能转换代码,但这个工具可以转换整个项目。


1

保留旧的 VB 代码。所有新的代码都用 C# 编写。迁移可能会比较慢,但你不会浪费时间。在空闲时间里,逐步将代码改写为 C#。


1

我曾经通过以下方式在一个项目中实现了这个:

  1. 创建一个C#类库
  2. 从VB Web应用程序中引用C#类库
  3. 在C#库中创建代码后台类
  4. 更新aspx/ascx文件中的"Inherits"属性以引用C#类(此文件仍存在于原始VB项目中)

它有点麻烦,因为您现在必须浏览多个项目才能查看单个页面/控件,但它确实让我做到了您想要做的事情。


1

您可以在解决方案中创建一个新的C#类库项目。在此处逐步重新编写一些类,然后将VB类替换为主项目中的类。

但说实话,除非您想学习C#或者真的不喜欢VB或者感到无聊,否则我认为这样做没有什么好处。


1

我曾经成功地使用Reflector(它是免费的)导入VB项目的dll,并将代码查看为C#。局部变量并不总是能够翻译,但您可以在进行比较和重构时进行调整。


0

这是可以做到的。我希望能够做到,因为我正在一个遗留的ASP.net应用程序上逐步进行。您可以一次只更改一个Webform。您可能会遇到困难的地方在于,我似乎无法在应用程序代码文件夹中混合使用不同的语言,因为它们会被编译在一起。


0

谢谢,但实际的转换本身并不是真正的问题。我猜我的问题标题并不是很清楚。与合并/部署Web项目相关的“增量”部分才是我真正想知道的。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接