compiling VB6 code in .NET environment - vb.net

Is one able to compile VB 6 code in Visual Studio.NET ? In other words, is it backwards compatible with older VB code?
Since I know there is a difference between managed code (.NET) and unmanaged code, I am wondering if Visual Studio.NET is able to compile unmanaged code as well?
Kind regards,
Kris

While you cannot compile vb6 in the .net Visual Studios, you may use interop libraries to allow vb.6 to utilize managed code
http://msdn.microsoft.com/en-us/library/kew41ycz%28VS.71%29.aspx

No, you can't compile VB6 code in any VS.NET version.

You can open a VB6 .vbp project file in Visual Studio. This automatically invokes the project converter, it will try to translate your VB6 code into VB.NET. The translator does a fairly decent job of it but the VB.NET language has changed pretty drastically. It depends on how 'clean' your VB6 code was.
After the conversion is completed, you'll have to walk through the list of warnings and errors you'll get. Getting none at all is rare. There might be hundreds or thousands. If you're in that boat, it starts making sense to rewrite the code.
Anyhoo, just try and see what hits the fan. You'll have a good idea what you're in for in about ten minutes. Don't forget to copy the project before you start the conversion.

No it is not compatible. I think there is an upgrade wizard, but you will end up fixing some stuff manually.

Related

"Could not resolve mscorlib ... .NETFramework,Version=v2.0" in VS2015 from VB6

My question is similar to others, but my particular nuance of this problem doesn't appear to have an answer I can find on here so far, so here goes. (edits in italics)
Our company has a deployed application written in VB6. Since VB6 development is no longer officially supported in Windows, our company made the decision to port our VB6 application to VB.NET.
(Prior to this edit, I had mentioned that the project was converted to VB.NET using VS 2015. This was incorrect, I discovered that my coworker had actually performed the conversion using VS 2008, and I was working on the 2008 project in 2015.)
So we are now working with the VB.NET conversion in VS2015. As many of us know, the VS 2008 converter does an incomplete job porting VB6 code to VB.NET code so there are many, many errors to sort through (as of this writing, all compile errors are fixed). In particular, though, I'm trying to open the various forms for the project in the Designer so I can see and work with them. The designer specifically is reporting the error:
Could not resolve mscorlib for target framework '.NETFramework,Version=v2.0'. This can happen if the target framework is not installed or if the framework moniker is incorrectly formatted.
I saw some mention of a 256 character limit on dependency paths. This dependency is met in my case. I have also confirmed that .NET Framework 2.0 is installed and active in my instance of Windows. I have seen the recommendation to upgrade the .NET Framework version as well, which was successful in itself but did not resolve this mscorlib issue.
Full call stack for this error follows:
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUniverse..ctor(IDesignTimeAssemblyLoader assemblyLoader, IVsDesignTimeAssemblyResolution projectAssemblyResolution, IVsSmartOpenScope dispenser)
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUniverse.GetUniverse(IDesignTimeAssemblyLoader assemblyLoader, IVsDesignTimeAssemblyResolution projectAssemblyResolution, IVsSmartOpenScope dispenser)
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkProvider..ctor(IVsDesignTimeAssemblyResolution assemblyResolution, IDesignTimeAssemblyLoader assemblyLoader, TypeDescriptionProvider parentProvider, IVsSmartOpenScope openScope)
at Microsoft.VisualStudio.Design.VsTargetFrameworkProviderService.get_TargetFrameworkProvider()
at Microsoft.VisualStudio.Design.VsTargetFrameworkProviderService.GetProvider(Type type)
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.GetType(String typeName)
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetType(String typeName)
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)
How can I gain the ability to view my project in the Designer?
As far as I know, opening VB6 files in VB.NET will not work. You will have to make modifications in Visual Studio 6.0 or re-write the application in VB.NET/C#.
Older versions of Visual Studio (until 2008) had some converters but they never really worked as expected.
You can take a look at Visual Basic Tools for Visual Studio, it "allows to work with classic VB workspaces and projects within Visual Studio.", this will allow you to modify the VB6 project in a newer version of Visual Studio but the code will remain VB6.
Regarding your exact issue, others have reported that the following worked for them:
Remove and add back project references that have warnings.
Rebuild the project
Remove and add back Microsoft.Office.Core
Good luck!
As someone who has converted a number of VB6 applications to VB.Net, I always advise a full rewrite. The languages are just too different. You waste far too much time trying to resolve issues of this type.
Better still, just leave the VB6 application running as is.
Microsoft's VB6 support statement

Error "Editor doesn't support the extension of file .VB"?

I converted VB6 project to VB.NET in Visual Studio 2008 but not able to open it in VS2010. Getting error
"Editor doesn't support the extension of file .VB"
Any pointers in this will be helpful.
As far as I know, even if you do a conversion, it will never be compatible. 2008 could open it with compatibility mode, but 2010 can't. You have to recode everything.
As far as i know, they have discontinued the support of conversion to VS2010. The only last chance you have is to convert to project VS2008. I have had the same problem with a huge project. And I was not able to convert it completely.
Even if you are trying to convert the project with VS2008 and if you used 3rd party components in it, after the conversion the project will not be able to run after some tweaking.
If you have a small project with pure VB6 that does not involve 3rd party components, then you can give it a try. Chances are only 50/50 for you.
Conversion in VS2008
Simple answer : Don't waste your time for converting it and then fixing the problem in it, just re-write the whole thing in .NET which is very ideal
Conversion of VB6 project to directly VS 2012 is not possible, Upgrade the project first by VS 2005 and then upgrade the vs2005 project to vs2012. It will work.

Porting a .bas file to vb.net

I'm working on some legacy VB5/VB6 code and need to convert a ".bas" file to vb.net.
I found several options
Compile the .bas file into a com dll and then reference and use it in my project. (For this I guess I would need vb5 or vb6 which I don't have at my disposal)
Copy and paste the contents of the file in to a new module in vb.net and then try solving the errors one by one.
The contents of the .bas file reference a particular dll.
The .bas file has mostly declarations consts, types, sub's and functions.
What would be the most elegant way of redoing this in vb.net. Is it as simple as option 2.
EDIT
I used VS2008 express and ran the code through the upgrade wizard it did the necessary conversion. and the .bas file was converted to .vb. I took that file and decided to rewrite other parts of the code, including some redoing of the converted .vb file.
Other questions related to this one are here.
Consider rewriting as an alternative. In my experience, this makes less work in the long run than either relying on an opaque COM library or using the VB6 migration wizard and picking up the pieces it spits out.
Depending on your knowledge of .NET, the rewrite of a single VB6 module shouldn’t take very long. If you are freshly starting with .NET then this may take longer but it will also provide good opportunities to learn .NET.
Microsoft provide guidance on what to do including an app that attempts to convert VB6 code to .NET
This includes both your solutions except 2 is helped by the converter.
It depends on how complex the VB6 code and what it does.
However if you are going to have to support and change the VB6 code it would probably be worth doing the conversion now.
There are a lot of advantages to converting to vb.net -- compatibility with future (and possibly current) systems and maintainability being the most important. The main advantage to leaving it as a dll would be to save development time, but this could backfire if there are future compatibility problems.
If the code is in a VB6 project now, or if it can be added to one, you can open the .vbp project file with vb.net and it will it asks if you would like to automatically convert it to vb.net. It does a pretty good job, exclusive of third party add-ons.

Can't add vb class to c# project in vs 2010

When I add my vb classes to my C# project in vs 2008 they are readily available to be used in my c# classes. But for some reason 2010 can't see them. I could be missing something simple but i couldn't make it work in the past hour. Any ideas?
Are you sure you had them included with action compile and not just action content?
CSharp and VB use two differnt MSBuild targets file and I've never heard of mixing them in the same project file. Different project types in the same solution - sure, but not what I think you are saying.
Of course it's a strange world so maybe someone will come by and suprise me with something I never thought possible outside of ILMerge after the build.
you can't mix 2 code languages. like you can add vb and vb, c# and c# but not vb and c# together.
If you do want to mix, use a code converter like c# - vb or something. Here is one to try instead of re coding it all again: Vb.net --> C# converter.
It may not be 100% working but at least you'll convert some code.

Visual Studio Conversion Wizard: Why put it in if it is broken? Whats the point?

I have tried converting many projects from vb.net 2005 to vb.net 2008, and not a single one has ever made it. Why do you think they even bothered to include this tool if it is very clearly broken? I mean, it can convert some code okay, but I can never load Design view properly, and it'll almost never compile without error.
Whats the point in putting in a broken tool? I thought Microsoft products were always backwards-compatible? Do they have any requirements before running the wizard?
Generally projects won't compile because the compiler/language/environment has changed, not because there's anything wrong with the project files.
I typically use vspc to convert project files, but I'm usually converting them from vs2008 to vs2003, which Visual Studio cannot do.
I've never had any trouble with the conversion wizard, but I mostly use C#.
What specific errors do you get?
Also, do you mean from VB6? If so, here's the answer:
VB6 and VB .Net (any version) are quite different. The VB Upgrade Wizard will try to convert what it can, and show you exactly what still needs work.
If the conversion tool is actually broken (I've had mixed success using it in the past, with the success rate being inversely proportional to the overall complexity of the project), then one reason to include it anyway is to convince developers to start new projects using the latest version of Visual Studio, and not to start them with an older version and hope that the upgrade process will be seamless.
I'm not saying this is why Microsoft would include a broken conversion wizard, but you never know. If you'd like me to delete this answer, Mr. Ballmer, just let me know.