Conversion programs: VB Conversions versus Instant C#


Forward

The reason for this review was initially to take a product I got through an NFR (not for resale) offer to task. I have done this as I see tons of people looking for VB to C# converters (and vice versa). I wanted to test the competitor’s product, Instant C#, but I could only get a demo. Queries to the author, Tangible software, went unanswered. As the demo for Instant C# seems to be only a demo in that it will not convert more than 1000 lines of source at a time, I believe this is still a fair analysis, but you have to make up your own mind. Both products offer a demo, so you have the opportunity to play before you pay.

If you have a problem with me comparing a demo, read the parts about VB Conversions and see if you like what you hear.

I may have missed some products out there. If so, I would be glad to take a competitor’s product around the block. And, if you are that competitor, you have an initial advantage in knowing what I am going to test with, at least for the first run.

This article has been altered, due to Dave’s comments (below). I feel I have offered enough admission that I was using a demo. Initially I intended to drop Instant C#, but it impressed me so much in the UI that I continued to test. Had it not been for the failures on translation, Instant C# would have most likely won the shoot off. I have contacted Dave and every address for Tangible to give them a chance for a rematch. If they would prefer to wait until they have the My space figured out, I am more than willing to wait, with the caveat I will give VB Conversions the chance to work with their latest version, as well.

I have one retraction in the mix in that I rushed to judgement on the help file. While I cannot state my mind set at the time, I did notice I did not unpack the help file from the zip, which led to the erroneous information, for which I offer an apology. The fact that INstant C# fails on conversion still makes it hard for me to recommend.

As a note, I downloaded the latest demo and see there are already some changes in the mix, so I will gladly revisit this topic if it is warranted. I have no dog in the hunt and could care less which product wins in the long run. I just want to make sure I recommend something that will be useful to you.

As for Dave’s comments, I do have answers to two points:

1. Proceeding with it in the first place when you couldn’t successfully contact us for a full copy.  As an example, what would your opinion be of a car review by an author who couldn’t test drive the car?
 
This is a bad analogy. A better analogy would be giving a review to an automobile if the salesman drove your around instead of driving it yourself. And, I agree, overall, but if the salesman was driving and the car stalled at highway speed, I would feel negligent not reporting it in a blog entry. The failures to convert, to me, are like that stall at highway speed. I see you are addressing many of them in your next release and I anxiously await it.
 
2. Not noticing many features that are plainly visible even via the demo (the many conversion options and the availability of the help file).
 
The help file was a faux pas on my part and I accept any chastisement I get for that. The command line is also there, but it is not as evident. I also accept any negative feedback on this point, but I do still find the VB Conversions method more obvious. As an architect, I also lean away from monolithic solutions, which is a bias I know is present, even though I accept it should not cloud my view of a product.
 
In short, if Instant C# can work through the issues with conversion, it has the better UI. It also have a few features not present in VB Conversions, although the reports in VB Conversions may make it a better option for you. I await seeing what happens with both Instant C# and VB Conversions in future versions and will gladly review both if the opportunity arises.

Initial Thoughts

The two products are priced fairly competitively. VB Conversions is $199 and Tangibles VB to C# Converter is $179. There is an option, with Tangible, to get a converter that goes the other way for the same price and bundle both for $299. Both companies have

First, let’s have a look at the products as they are stoked up. Here is a screenshot of VB Conversions:

MainWindow

And one of Instant C#:

INstantCSharp

If I were rating the products on look and feel, Instant C# would get my initial win in this category, as I really like the tabbed look.

Winner: Instant C#

Layout of the Land

VB Conversions comes with both a command line and a GUI version of the product. As near as I can tell (no help file with Tangible’s demo), Instant C# does not have a command line version. I have since realized I unpacked only the executable and there is a help file available. I have also noted a few differences in the latest demo, but I am going to give Tangible the opportunity to send me a full version before commenting. I am offering the same opportunity to VB Conversions for any changes they might have made, as that is only fair.

NOTE: With the demo version, you have to call "demo instant csharp" project directory rather than the syntax in the help file.

VB Conversions also is set up as applications calling DLLs, which is much cleaner and opens a world of options, if the standard options do not work for you. Both products are written in .NET.

While this does not affect the way the program works, I am fonder of a properly tiered architecture. Instant C# is rather monolithic, which can get to be dicey if there are bugs in the product. This is more of an aside than anything else.

Winnner: ALTERED: I still nod towards VB Conversions on this point, as one has to search for the command line on Instant C# in the help file, rather than being presented with a separate command line executable. In the demo, it still tries to spin up the GUI in Instant C#, which is not a big deal, just me begina geek?

UI Features

Initially, Instant C# seems like a hands down winner, but as I continue to play with it, I notice there are not too many right click menus to get to information and I often have to click links away from the actual report surface. In addition, Instant C# has very few reports when it does its work. Since the demo seems size limited, I doubt this is a demo only issue, but I have to consider that might be the case. Instant C# has a snippets conversion, which I am sure I will cover again, so it gets a bit of a nod to start.

VB Conversions seems to be devoid of UI features, but that is just until you drill down into the product. With every action you perform, you find there are pre-checks, a running “summary” of the work being performed and reports when you are done. The UI is still not pretty throughout most of these features, but it definitely gives a lot of bang for the buck.

Winner: Tie? Instant C# for snippet conversion. VB Conversions for everything else.

Functionality

I am going to break this down into different features, as that is where the value is. First, I will start with a single project and then go down to doing multiple projects.

Single Project

For the single project, I chose to download Microsoft’s Visual Studio 2008 RTM VB Samples. I then picket the AppEvents sample and ran it on both VB Conversions and Instant C#.

At first blush, Instant C# is much nicer. It allows me to choose a directory when I go to convert. This allows me much more flexibility than simply creating a CS directory. But once I dangled the options carrot in front of my face, I was hooked. Just like I enjoy the option of being able to run from the command line (not present in Instant C#), I like to be able to choose where I put the new source (VB Conversions).

Speed? Both products are wicked fast in conversion. Instant C# lets you know just how fast it is, at least in round numbers. I will have to check times on conversion of all products in the tree. Checking the products, neither give me any warnings, although VB Conversions does raise an error writing to file warning. That is a bit concerning.

Now on feel, VB Conversions is getting a winning hand. When I go to convert, it gives me a preflight. Coming from the print industry, where a program called pre-flight saved my butt quite a few times, this is nice. Not mandatory, but nice knowing that the developer is exposing things up front.

Preflight

The next step:  I converted the project. Instant C# reports everything on the page and I have 10 notes, no warnings, no errors. Pretty straightforward! VB Conversions gives me a bit of a report and states it has checked runtime behavior. Nice addition.

ConversionDialogue

Oh, wait, it also gives me a report of what it created. That is nice.

ConversionReport

Here are the results:

VB Conversions – Compiled the first time. Thumbs up.
Instant C# – 4 errors that prevented compile. Ouch! Thumbs down.

I am not as upset about not compiling than the converter not being able to notice there might be a problem. If I were warned, I would feel better about this.

Here is the culprit with Instant C#. VB Conversions recognizes the My space for VS 2008, Instant C# does not. Instant C# code:

public void SetConnectionStatus(bool connected)
{
      if (connected)
      {
            My.Forms.MainForm.ConnectedStatusLabel.Image = Properties.Resources.connected.ToBitmap();
            My.Forms.MainForm.ConnectedStatusLabel.Text = Properties.Resources.ConnectedText;
      }
      else
      {
            My.Forms.MainForm.ConnectedStatusLabel.Image = Properties.Resources.disconnected.ToBitmap();
            My.Forms.MainForm.ConnectedStatusLabel.Text = Properties.Resources.DisconnectedText;
      }
}

VB Conversions does the following (there is also a manipulation of the form code to accomplish things):

public void SetConnectionStatus(bool connected)
{
      if (connected)
      {
            NetworkEvents.MainForm.Default.ConnectedStatusLabel.Image = global::My.Resources.Resources.connected.ToBitmap();
            NetworkEvents.MainForm.Default.ConnectedStatusLabel.Text = global::My.Resources.Resources.ConnectedText;
      }
      else
      {
            NetworkEvents.MainForm.Default.ConnectedStatusLabel.Image = global::My.Resources.Resources.disconnected.ToBitmap();
            NetworkEvents.MainForm.Default.ConnectedStatusLabel.Text = global::My.Resources.Resources.DisconnectedText;
      }
}
Okay, so we have a “minor” failure in conversion of VB project. IT has to be in the MainForm, so I look there.

namespace NetworkEvents
{
      public partial class MainForm
      {

            private void exitToolStripMenuItem_Click(object sender, System.EventArgs e)
            {
                  this.Close();
            }
      }

}

There is not much here. That is not good. A bit of a search and I find that the constructors, etc. are thrown into the Designer C# class. Now I am fiddling a bit. Neither of these products creates a program.cs for the Main() routine (startup routine). Perhaps this is due to the project? Will get back to that in a moment.

So far, Instant C# has earned another black mark. The Designer is not used for code like constructors. It is designed to be used to get the entire designer FUD out of your main class file, so you can work on the routines you need access to. In .NET projects, you need to have access to routines like the constructor. You should not have to dink with the placement of controls, other than visually. This is the reason for having a separate designer file. Instant C# now has two thumbs down.

After tweaking, I get the Instant C# code to work by adding a default instance (to mirror what VB does) and it compiles. To be honest, I did not really want to dink with this, so I stole code from the VB Conversions solution to get things working. I still wasted about 10 minutes figuring out what was wrong with the project files. It would have been many more minutes if this were my sole product.

public void SetConnectionStatus(bool connected)
{
      if (connected)
      {
        NetworkEvents.MainForm.Default.ConnectedStatusLabel.Image = Properties.Resources.connected.ToBitmap();
        NetworkEvents.MainForm.Default.ConnectedStatusLabel.Text = Properties.Resources.ConnectedText;
      }
      else
      {
        NetworkEvents.MainForm.Default.ConnectedStatusLabel.Image = Properties.Resources.disconnected.ToBitmap();
        NetworkEvents.MainForm.Default.ConnectedStatusLabel.Text = Properties.Resources.DisconnectedText;
      }
}

Now let’s return to the fact both put the Main() routine in the form instead in its own file. I create a simple windows application in VB and convert. By simple, I mean I have created a form with no code. And both convert correctly. I can build.

VB Conversions warns me that Option Strict is turned off. I get no such warning from Instant C#. I would count that as another black mark, but the failure to compile, and no warnings, prior means it is just deepening the black mark received for our last test.

It is also quite evident that VB likes to stick Main() inside of the first form. I do not like this as I sometimes have conditionals to determine what form loads when an application starts. While putting it in a form does not change functionality, it can be confusing if you change the main start up form, as the code is not there. Perhaps another reason for me to avoid VB? J

With the simple form, both projects worked fine. As long as you do not reference back to a form, you might be okay with either product.

Winner: I think this one is clear. VB Conversions wins hands down. This might not be as important with simple projects, but the VB Conversions author’s understanding of converting VB clearly stands out when running a more complex sample (the sample is actually not that complex, but it is more complex than an empty form).

Multiple Projects

I now move to convert all of the sample projects.  At first blush, they seem fairly similar, but options is where VB Conversions stands out. Let’s, therefore, begin with Instant C#. I have one option: Convert the folder to another folder. Unfortunately, this is as far as I can go, as the demo is neutered. I am not sure if the product does all files in a single folder or all files in a folder and its full tree of subfolders. The lack of an NFR copy does not give me many options.

So, I will focus on the product that I have that is more than a demo. When I choose the Convert Multiple VB.NET Projects to C# option, I get a dialog to select a project list. This is nice, as it suggests a bit of flexibility. As you will see, this is exactly what it affords me. There is one nitpicky thing I do not like here, however. I cannot delete a project once I create it. You can see this in the screen cap below:

Project-List

I have made a note to return to this and see if I cannot dink the project list. It has to be stored somewhere, but not somewhere easy to find, even using the help file. Mark this as another enhancement to request from the author and move on.

The project list is nice. It even finds the projects that have already been converted.

ProjectsList1

Let’s try clicking on a single project and converting. First, choose the one that I already converted. And, it warns me it has already been converted. That is a nice touch.

ProjectAlreadyConverted

I then convert the second project on the list (ClickOnceApp.vbproj) and it converts in an almost identical manner as the previous conversion. So far, it appears to have a nicely OO kind of approach.

Now to all projects in my list, which is rather extensive. It estimates it will take 4 minutes to convert everything at the beginning (this time adjusts as it does work). As it converts, it checks off the projects that succeed and those that have some issues. Here are the stats:

  • Actual time to convert: 5:23
  • Number of projects marked successful: 93
  • Number of projects with errors: 16
  • Total Number of VB Lines: 141,784
  • Total Number of C# Lines: 168,411
  • C# Lines in Error: 39
  • Percent accurate: 99.98%

Here is the screen shot with the stats:

ConversionReport-for-Full-R

Now, I am going to run through the projects and see which, of the successful projects, compile. When trying to load the ExcelAuto.csproj, I end up with the following error:

FailureToLoad

This is caused by a bug in the project file:

  <ItemGroup>
      <Reference Include="Microsoft.VisualBasic"/>
      <Reference Include="mscorlib"/>
      <Reference
    <Reference Include="Microsoft.VisualBasic.Compatibility" />

After fixing it, it stokes up but does not properly compile. Looking at the original VB project, I see the culprit. The conversion utility is not good at fixing project references. This may be due to the samples not having a compiled version in the /bin? Mark that as a bug? Not sure. I then try to compile the fixed project (with project reference) and I have to fix one using statement. I am fairly certain this is an extension of the same issue.

Of the successful projects, I was able to get all 93 to compile. I am sure this should be 96, but I cannot find three of the projects and do not have time to find them right now.

Of the failed projects, straightening out references fixed 2 out of 16 projects, but I did not go through all of them (not enough time). I would love to go back through and find out why it errored on these projects (the geek in me), but it is a waste of my time. The author of VB Conversions can download the VS 2008 samples and run through them himself.

Of interest, VB Conversions does convert LINQ samples. I ran back and opened Instant C# to compare and found it failed miserably. Another point for VB Conversions?

There are many different ways to convert in VB Conversions, only one in Instant C#. Here are the ways with VB Conversions

Single Project

  • Project List built by hand – adding one project at a time
  • All projects in a folder
  • All projects in a folder tree
  • All projects in a solution

Selected projects in any of the above ways of creating a project list

As I stated earlier, my big beef is not being able to delete a project list once you create it, at least not in the application proper. Not much beef overall, as this is a minor annoyance compared to not creating useful code.

Winner: VB Conversions. It successfully converted about 90% of the projects, with a few others that just needed a reference check. It also has a variety of ways of slicing up the projects and allows me to selectively convert projects in a list.

Reports

This is strictly a review of VB Connections at this time, as I see no reports in the Instant C# demo. VB Conversions has a plethora of reports you can access from the project list conversion form. Here are the ones I have looked at:

Projects

  • By Project Status
  • By Project Name
  • By Lines of Code
  • By Number of Potential Problems
  • By Number of Conversion Notes
  • By Number of C# Compiler Errors
  • By Conversion Time

Potential Problems

  • By Project
  • By Severity
  • By Type

Conversion Notes

  • In List by Severity
  • In List by Type
  • In List by Project

C# Compiler Errors

  • By Project
  • By Severity
  • By Error Code

I see no reports in Instant C#, as mentioned at the start of this section. There are a few information popups on the individual screens, but nothing I can print out to start whacking problems.

Winner: VB Conversions

Summary

I would not purchase Instant C#. While I was only using a demo, the failure on projects suggests it is not ready for prime time. I would like to take the full product for laps, but as it stands, there were too many failures on the few items I tried that I cannot recommend it in good faith.

VB Conversions is another story. It does have some failures, but it warned me in every case but one (which was a project reference). If the author had solved the project reference problem, I would have had at least two fewer failures on the run. Still, 96 out of 112 projects is not a bad run, especially when one considers that the conversion from VB to C# is not merely a syntax issue. I believe the understanding of this fact is why VB Conversions shines in comparison to Instant C#.

Overall, the ugly UI is the worst part of VB Conversions. With a small amount of whitewash, it would look like an enterprise product. The fact the author saw to putting in reports already puts it in that camp, in my opinion, even though it is priced far below many Enterprise level utilities.

I suggest the author consider a few changes:

  1. Allow the user to specify a directory rather than simply slapping a CS directory under the project directory. This is not a major issue when converting one project.
  2. Give the option to delete a projects file after you create it
  3. Get rid of the buy option after a valid code is put in. This is nitpicky, but it is something I noticed.
  4. Examine the failed projects amongst the Visual Studio 2008 RTM VB Samples. Amongst the 16 failed projects some failed for some pretty funky reasons. Solving these problems will make the product closer to bullet proof.
  5. Make the UI a bit less kitschy. A cleaner UI would be a nice selling point. While a VW bug with a Porsche engine runs just as nice, which would you rather ride around in?

I will probably think of a few more later, but this is a good list to start with, eh?

Peace and Grace,
Greg

Advertisements

One Response to Conversion programs: VB Conversions versus Instant C#

  1. Unknown says:

    I can’t believe you performed a review on our product without having access to the full product.  We did not receive any communication from you (you surely must be aware that occasionally unsolicited emails are blocked – perhaps we don’t scan our spam folder thoroughly enough).  We would have been happy to provide you with a full copy of Instant C#.
     
    Even with the demo edition, you can verify several conversion options:
    – By project group (see Tools/Conversion Groups – this is even on the demo)
    – By project (this is the most obvious option on the first tab and you missed this?)
    – By solution (you can also see this option on the first tab of the demo)
    – By folder
    – By code snippet
    – By ASP.NET file or snippet
     
    We do have a help file – this is accessed via many locations in our application.  You may need to ‘unblock’ the .chm file after downloading, but this would be true for any .chm file.  Even when the file is blocked by your firewall, you can still access it (the navigation pane will not show if the .chm file is blocked, but I don’t see how you reached the outrageous conclusion that there is no help).
     
    We do have many command line options.  These are described in the help file.
     
    I acknowledge at least one of the problems you reported (regarding conversion of a new 2008 ‘My’ namespace feature).  This omission will be addressed soon.  We’ll also be addressing anything else in this review that requires our attention.
     
    In my opinion, you were extremely negligent in your review in two areas:
    1. Proceeding with it in the first place when you couldn’t successfully contact us for a full copy.  As an example, what would your opinion be of a car review by an author who couldn’t test drive the car?
    2. Not noticing many features that are plainly visible even via the demo (the many conversion options and the availability of the help file).
     
    Regards,
    Dave
    Tangible Software Solutions Inc.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: