בגרסה 2005 שיצאה עם גרסת 2 NET Framework, יש ניסיון לחזור למוסכמות תכנותיות של ה-VB6, כך למשל בטופס: חלון הקוד פושט וסולקו ממנו בבררת המחדל הגדרות מפורטות של הפקדים, הבנאי ועוד לחלון נפרד של עיצוב הטופס (Just My Code). הוסף האובייקט My, שמאפשר להתייחס בקלות לאובייקטים תכנותיים מגוונים לפי נושאים, חזרה השליטה על הגדרת תחומי מערך, והוסף תחביר להצגה מידית של טפסים, כפי שהיה נהוג בעבר. קיימת מחלקה לטיפול מובנה בפרמטרים של התוכנה, הנשמרים והנקראים מקובץ XML. הוספה אפשרות מובנית לרכז את כל המשאבים של הפרויקט במקום אחד, מה שמונע כפילות שהייתה קיימת עד כה. הוספו תגיות חכמות לפקדים, וניתן לקשור בין אירועי פקד לבין שגרות קיימות, מתוך רשימה קיימת באופן דומה למה שכבר יושם בעבר בתוכנת אקסס.
בגרסה זו הוספה לראשונה יכולת של העמסת אופרטורים והעמסת המרת סוג. הוגמש וחוזק השימוש במאפיינים ובאירועים. הוספו טיפוסי מספרים שלמים מסוג Unsigned, פקודת TryCast לבדיקת ביצוע המרה, פקודת Continue בלולאות, בלוק Using לשימוש מהיר באובייקט ושחרורו, הגדרה אגבית של מונה הלולאה בתחילת לולאות, תמיכה מובנית וחזותית בפרמטרים של הגדרות התוכנה באמצעות מחלקה ייעודית (Settings), הערות מתכנת במבנה XML להסבר הקוד, ותמיכה גנרית באוספי רשומות, למספר רב של טיפוסים כמו BitArray HashTable, Queue, StoredList ו-Stack. משמעות חלק מהשיפורים היא הגברת התאימות לשפת #C.
כמו כן, הוספו כחמישה עשר פקדים מובנים חדשים ביניהם SerialPort - לגישה ליציאה הטורית של המחשב, MaskedTextBox ליצירת תיבת טקסט עם מסכות, BackgroundWorker - לביצוע תהליכון ברקע, TableLayoutPanel - לסידור של פקדים במבנה, WebBrowser - לקריאה של קובצי HTML ושירותי דפדפן, ו-FolderBrowserDialog - לדפדוף בתיקיות דיסק. משפחת פקדי תפריטים חדשים (Strip) שמחליפים את פקדי התפריטים הישנים (Bar), ופקדי כריכה לנתונים של קובצי בסיסי נתונים, הכוללים תכנות ויזואלי שמאפשר בקלות לייצר טופסי נתונים באופנים שונים. פקדים אלו מהווים תוספת משמעותית להקלה על העבודה התכנותית בהרבה היבטים. גם הפקדים שכבר היו כלולים באופן כזה או אחר, בחבילת הפקדים השיתופיים של הוויז'ואל בייסיק בגרסה 6, עברו מקצה שיפורים.
כמו בגרסאות הקודמות, ניתן לייצר קובץ התקנה והפצה כפרויקט בתוך פתרון. בגרסה זו הוספה יכולת להורדה של סביבת הדוט.נט מאתר מיקרוסופט, במקרה שהיא עדיין איננה קיימת במחשב.
בשפה זו כמו בכל חבילת השפות של הדוט.נט הוספה גרסת חינם לחובבים וסטודנטים, בשם Visual Basic 2005 Express. לגרסה זו שכוללת סביבת פיתוח חלקית, חסרים כמה וכמה היבטים המצויים בגרסה המלאה ובהם הידור ל-64 ביט ולהתקנים ניידים, ניוון מנגנון ההפצה, היעדר אפשרות להוסיף הרחבות ועוד.
גרסה 2008.
גרסה זו גם מכונה Visual Basic .NET 9.0 יצאה ביחד עם NET Framework 3.5. חידושים בגרסה זו: הוספה שפת LINQ שהיא הרחבה של שפת SQL לאובייקטים, מסדי נתונים ושפת XML, ופישוט התכנות של מבנים ועבודה עם רשומות בעקבות הכנסת חידוש זה. בעקבות זאת פקודות SQL הפכו לחלק מהתחביר של VB.NET. בגרסה זו נוסף פרויקט מסוג WPF שיועד על ידי מיקרוסופט להיות מערכת הדור הבא ליישומי לקוח. בפרויקט זה הופרד עיצוב הממשק מהקוד לשפה מבוססת XML, והושם דגש על הוויזואליות של הממשק, ועל שימוש קל בגרפיקה דו ממדית ותלת ממדית, אנימציה, מולטימדיה, טיפול במסמכי XPS ובדיו אלקטרוני ועוד. נוספה תמיכה במולטי טרגטינג שהיא האופציה לתחם את הפרויקט לגרסה מסוימת של .NET, ואף למקד את הפרויקט לגרסת מערכת הפעלה מסוימת. נוספו שיפורים לשפה כמו אפשרות להגדיר משתנים ריקים (שערכם Nothing), ולבצע קריאה לשגרת פקד קיימת ללא פרמטרים, תמיכה בתחשיב למדא, Type inference (זיהוי אוטומטי של סוג טיפוס ערך), Anonymous type -טיפוס אלמוני, שמייתר הגדרה מפורשת בתחשיב למדא, ו-Extension method - תכונה המאפשרת להרחיב יכולות של אובייקטים של המערכת ולהוסיף להם שיטות מותאמות של המתכנת. ה-IDE שופר בתחביר האינטליגנטי שמקפיץ חלונית צפה ובו המילים האפשריות לפי הקשר, וכן בסידור שורות המשך (בשימוש באופרטור _, קו תחתון). מנפה השגיאות שוכלל באופן שמאפשר לעקוב אחרי תהליכונים, ולדלג לתוך קוד המקור של ספריות הדוט נט עצמו. נוספה ארכיטקטורה חדשה של הרצת קוד מנוהל שמאפשר להריץ טוב יותר את הקוד. וכן, קוד מטריקס שמאפשר לאבחן את הסיבוכיות וקלות התחזוקה של קוד המקור של המתכנת לפי מתודות.
גרסה 2010.
גרסה זו שמספרה הוא 10.0 יצאה באמצע אפריל 2010, ביחד עם NET Framework 4.
בגרסה זו הורחבה התמיכה בפקודת Lambda. במקרים רבים בוטל הצורך בשימוש במקף החיבור (_) לפקודה שמשתרעת על פני מספר שורות. נוספה אפשרות ליישום אוטומטי (ומקוצר) של מאפיין מחלקה בשורה בודדת בדומה לקיים ב-C#. הוסף אתחול מקוצר של אובייקט אוסף, בדומה לאתחול של מערך. נוספו שיפור עבודה עם מערכים. תמיכה ב-Dynamic Language Runtime, כך שהשפה יכולה לתקשר ביתר קלות עם שפות דינמיות. שיפור בפרמטרים אופציונאליים. והוספת אפשרות להטמעת מעטפת Interop לרכיבי COM בקובץ ההרצה של היישום, במקום DLL עצמאי, כדי למנוע התנגשות בין גרסאות שונות. בטופס נוסף פקד chart - ליצירת גרפים. (לרשימת חידושים רשמית).
גרסה 2012.
לגרסה זו הוספו מספר תכונות חדשות:
Async Function AccessTheWebAsync() As Task(Of Integer)
Dim client As HttpClient = New HttpClient()
Dim getStringTask As Task(Of String) = client.GetStringAsync("http://site.org")
DoIndependentWork()
Dim urlContents As String = Await getStringTask
Return urlContents.Length
End Function
גרסת 2013 (VB 12.0).
גרסת Visual Basic 2013 שוחרר לצד .NET Framework 4.5.1 עם Visual Studio 2013. יכול גם לבנות יישומי .NET Framework 4.5.2 על ידי התקנת Developer Pack.
גרסת 2015 (VB 14.0).
גרסת Visual Basic 2015 (קוד בשם VB
14.0) שוחרר עם Visual Studio 2015. תכונות השפה כוללות "?." אופרטור לביצוע בדיקות null מוטבעות, ותכונת אינטרפולציה חדשה של מחרוזת כלולה לעיצוב מחרוזות בשורה.
גרסת 2017 (VB 15.x).
גרסת Visual Basic 2017 (קוד בשם VB "15.) שוחרר עם Visual Studio 2017. מרחיב את התמיכה בתכונות השפה החדשות של Visual Basic 15 עם גרסאות 2017, 15.3, 15.5, 15.8. מציגה רפקטורים חדשים המאפשרים ארגון קוד מקור בפעולה אחת.
גרסת 2019 (VB 16.0).
גרסת Visual Basic 2019 (קוד בשם VB "16.0") שוחרר עם Visual Studio 2019. זוהי הגרסה הראשונה של Visual Basic המתמקדת ב-.NET Core.
בין שפת VB.NET לשפת C#.
שתי שפות אלו הן השפות המרכזיות של סביבת הדוט נט, והפונקציונליות התכנותית של שתי שפות אלו בסופו של דבר דומה, על אף שהתחביר שלהן מבוסס על שפות שונות. פונקציונליות זו אף מתכנסת מגרסה לגרסה, כך שקיימים ממירים אוטומטיים שממירים קוד משפה לשפה, ושאת קוד הביניים שנוצר (CIL) ניתן להנדס לאחור לכל אחד משפות אלו. התאימות ביניהן כה חזקה שמחלקה שנכתבה ב-C#, ניתן לרשת ב-VB.NET ואף לדרוס פונקציה שקיימת בה.
בשפת VB.NET הושם דגש על ידידותיות וקלות בפיתוח (אוטומציה גדולה יותר בחילול קוד. השלמה אוטומטית של כתיבת פקודות, הזחה אוטומטית של הקוד, ניווט קל בין אירועי פקד, הסתרה של Delegate וטיפול אוטומטי באירועים), על האינטואיטיביות והקריאות של הקוד (פקודות מפורשות ומובנות יותר), ושפה זו יותר גמישה תכנותית ו"סבלנית" כלפי המפתח (למשל המרה אוטומטית בין טיפוסי משתנים, הנגשת תכונות sender בפונקציית אירוע ללא המרה, משפט Case שאפשר לערב בו אותיות, מספרים ואף ביטויים, מאפיין עם פרמטר ועוד), ופעולות טכניות שונות הוסתרו מאחורי הקלעים. לעומת זאת בשפת C# הושם דגש על הדיוק הטכני וההקפדה התכנותית (למשל בהמרה בין סוגי משתנים, הקפדה על החזרת ערך בפונקציה), על הבנה ומעורבות עמוקה של המתכנת בתכנות, על חוזק תחבירי של הקוד (שמבוסס על קונבנציות של שפת C), ועל תאימות והתממשקות לשפת C++ (אפשרות לכתוב קטעי קוד מעורבים של C# ו-C++).
בעוד ששפת VB.NET אמורה לשמש את מתכנתי ה-VB, שפת C# אמורה לשמש את מתכנתי ++C. ולכן בסופו של דבר יצא ששפת C# יותר פופולרית אצל מתכנתים, והיצע המשרות בה גדול באופן ניכר על פני המשרות בשפת VB.NET.
מבנה השפה.
בדומה ל-#C לכל רכיב בשפה קיימות חמש רמות הרשאה לגישה. ההרשאה הפתוחה ביותר היא Public המאפשרת גישה מכל אובייקט, לאחריה הרשאת Protected המצמצמת גישה למחלקות יורשות, ולאחריה הרשאת Private שמצמצמת גישה רק לחברי המחלקה עצמה. בנוסף ישנה הרשאת Friend המאפשרת גישה כללית רק מתוך ה-Assembly של המחלקה, והרשאת Protected Friend המאפשרת גישה מתוך מחלקות יורשות גם אם הן ב-Assembly אחר.
ב-VB.NET קיימים שני תחומים שבהם ניתן לכתוב קוד:
מודול.
הראשון הוא מודול (Module). מודול הוא המתחם הגלובלי של VB.NET. באזור זה שמתחיל במילה השמורה - Module ומסתיים במילה השמורה - End Module, ניתן לכתוב קטעי קוד שונים: הגדרות של טיפוסים ומבנים חדשים, הכרזות של משתנים, פונקציות ושגרות ובגרסת הדוט נט, אף מחלקות. פונקציות כלליות שאינן שייכות למחלקה מסוימת, נהוג לכותבן באזורים אלו. כמו כן, זהו המקום להכריז על משתנים ואף מחלקות שרוצים שיהיו גלובליים ונגישים לכל התוכנית. ישנה שגרה מיוחדת בשם ()Main שתיכתב במודול ראשי, שתפקידה הוא להתחיל את הרצת התוכנה כולה. אם כותבים אותה עם פרמטר מערך, אפשר לקבל פרמטרים בהרצת קובץ ה-EXE של התוכנה ולהתייחס אליהם בשגרה.