Can C# compiler compile a VB.Net code?

后端 未结 4 1979
离开以前
离开以前 2021-01-05 14:46

I found following on a ASP.NET book. I am learning and curious about following content.

The second major advantage of an IL architecture is that it en

4条回答
  •  醉酒成梦
    2021-01-05 15:36

    They have separate compilers (csc.exe for C# and vbc.exe for VB.Net) but they both get compiled into IL and then at run-time JIT compiles it into machine code.

    Question 1 : can C# compiler compile VB.net code?

    Answer 1: No it can't and you will see that in the below example. It gives an error if you try to do that as it looks for C# syntax.

    Question 2: I think that's what they say in the book. Since it is two compilers, I feel it is not compatible

    Answer 2: It doesn't say that you can compile VB code using C# but it says that you can mix languages in a single application like I did in the example below and still able to compile C# and VB (using their compilers).

    See below example to understand how it works. I created a solution with a C# project with a C# class and a VB project with a VB class. You should not mix C# and VB classes in same project as it will ignore the vb file if its a C# project during build.

    Solution Structure

    Content of ClassCSharp.cs:

    namespace ClassLibraryCSharp
    {
        public abstract class ClassCSharp
        {
            public int MyProperty { get; set; }
    
            protected abstract void Test();
        }
    }
    

    Content of ClassVBInCSharp.vb in C# ClassLibrary. See how I can inherit from a C# class and also access its properties and override the method.

    Namespace ClassLibraryVB
        Public Class ClassVBInCSharp
            Inherits ClassCSharp
            Property Test2 As Integer
    
            Protected Overrides Sub Test()
                Test2 = MyBase.MyProperty
            End Sub
        End Class
    End Namespace
    

    See below commands I ran:

    vbc.exe /reference:"ClassLibraryCSharp.dll" /target:library /out:"ClassLibraryCSharpVbVersion.dll" "ClassVBInCSharp.vb"
    Microsoft (R) Visual Basic Compiler version 12.0.20806.33440
    Copyright (c) Microsoft Corporation.  All rights reserved.
    

    See above VB Compiler is used to compile vb class.

    csc.exe /reference:"ClassLibraryCSharp.dll" /target:library /out:"ClassLibraryCSharpVersion.dll" "ClassVBInCSharp.vb"
    Microsoft (R) Visual C# Compiler version 4.0.30319.33440 for Microsoft (R) .NET Framework 4.5
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    ClassLibrary1\ClassVBInCSharp.vb(1,1): error CS
    0116: A namespace cannot directly contain members such as fields or methods
    

    See above if I try to use C# Compiler to compile vb class it throws an error as its looking for C# syntax.

提交回复
热议问题