{{위키데이터 속성 추적}}
{{프로그래밍 언어 정보
| 이름 = 비주얼 베이직 닷넷
| 로고 = VB.NET Logo.svg
| 연도 = 2001년
| 설계자  = [[마이크로소프트]]
| 개발자 = 마이크로소프트
| 로고 = 
| latest release version = {{wikidata|property|reference|edit|P348}}
| latest release date = {{시작 날짜와 나이|{{wikidata|qualifier|P348|P577}}}}
| 구현체 = [[마이크로소프트 비주얼 스튜디오]], [[마이크로소프트 비주얼 스튜디오 익스프레스]], [[닷넷 프레임워크 SDK]]와 [[모노 (소프트웨어)|모노]]
| 영향을 받은 언어 = [[닷넷 프레임워크]]
| 영향을 준 언어 = 
| 선언 = [[자료형 체계#정적 및 동적 입력|정적]], [[자료형 체계#강력한 및 약한 입력|강력함]], [[자료형 체계#안전한 및 불안전한 입력|안전과 불안전]],<ref><code>Option Strict</code>는 안전한 및 안전하지 않은 형식 검사 사이를 전환하는 데 사용할 수 있다.</ref> [[임명적 자료형 체계|지명적]]
| 방언 = 마이크로소프트 비주얼 베이직
| 패러다임 = [[구조적 프로그래밍|구조적]], [[명령형 프로그래밍|명령적]], [[객체 지향 프로그래밍|객체 지향적]]과 [[선언형 프로그래밍|선언적]]
| 플랫폼 = [[공통 중간 언어|CLR]]
| 운영 체제 = 주로 [[마이크로소프트 윈도우]]<br />또한 [[안드로이드 (운영 체제)|안드로이드]], [[BSD]], [[iOS]], [[리눅스]], [[맥 OS X]], [[솔라리스 (운영 체제)|솔라리스]] 및 [[유닉스]]
| 라이센스  = [[독점 소프트웨어]] ([[상용 소프트웨어]] 또는 [[프리웨어]])
| 웹사이트 = [http://msdn.microsoft.com/vbasic msdn.microsoft.com/vbasic]
| 파일_확장자  = <code>.vb</code> 및 <code>.vbs</code>
}}'''비주얼 베이직 닷넷'''(Visual Basic .NET, VB.NET)은 [[비주얼 베이직]](VB)의 진화된 형태인 [[객체 지향]] [[컴퓨터 프로그래밍 언어]]이며, [[닷넷 프레임워크]]에서 구현된다. [[마이크로소프트]]는 현재 [[상용 소프트웨어]]인 [[마이크로소프트 비주얼 스튜디오]], [[프리웨어]]인 [[마이크로소프트 비주얼 스튜디오 익스프레스]], 두 가지의 주된 비주얼 베이직 [[통합 개발 환경]]을 제공한다.


== 지원 운영체제 및 하드웨어 요구사항 ==
* '''지원 운영 체제'''
** 윈도우 XP 서비스 팩 2 이상(2010 출시는, 서비스 팩 3)
** 윈도 서버 2003 서비스 팩 1 이상
** 윈도 서버 2003 R2 이상
** 윈도우 비스타
** 윈도 서버 2008
** 윈도 7
* '''하드웨어 요구사항'''
** 최소: 1.6&nbsp;GHz CPU, 384 MB RAM, 1024×768 화면, 5400 RPM 하드 디스크
** 권장: 2.2&nbsp;GHz 이상의 CPU, 1024 MB 이상의 RAM, 1280×1024 화면, 7200 RPM 이상의 하드 디스크

== 버전 ==
{{낡음 문단}}
비주얼 베이직 닷넷은 지금까지 여섯개의 판이 개발되었다.(2014년 1월 기준)
=== 비주얼 베이직 닷넷 2003(VB 7.1) ===
비주얼 베이직 닷넷 2003은 닷넷 프레임워크 '버전 1.1'과 함께 출시되었다. 새로운 특징은 [[닷넷 컴팩트 프레임워크]]에 대한 지원과 더 나은 비주얼 베이직 업그레이드 [[마법사 (소프트웨어)|마법사]]가 포함되었다는 것이다. 또한 성능과 닷넷 IDE(특히 [https://web.archive.org/web/20071229020443/http://msdn.microsoft.com/msdnmag/issues/05/06/AdvancedBasics/default.aspx 배경 컴파일러])와 런타임의 신뢰성을 개선하였다. 또한 비주얼 베이직 닷넷 2003은 '비주얼 스튜디오 닷넷 아카데믹 버전'(VS03AE)에서 사용할 수 있었다. VS03AE는 비용 없이 각 나라에서 일정한 수의 학자들에게 배포되었다.

=== 비주얼 베이직 2005(VB 8.0) ===
비주얼 베이직 2005는 Visual Basic .NET의 업데이트 판이다. 비주얼 베이직 2005부터 마이크로소프트는 제목에 '.NET'을 붙이지 않기로 결정하였다.

추가된 기능:

* 편집, 계속하기
* 디자인-시간(Design-Time) 표현식 평가.
* 'My' 가상 [[이름공간]]([https://web.archive.org/web/20081016001752/http://msdn.microsoft.com/msdnmag/issues/06/00/VisualBasic2005/default.aspx 개요], [https://web.archive.org/web/20080424012019/http://msdn2.microsoft.com/en-us/library/ms379610.aspx 세부 사항]). 다음 사항을 제공한다:
** .NET 프레임워크의 특정 영역에 접근하기 쉬워짐.
** 동적으로 생성된 클래스(''My.Forms''가 대표적)
* VB-VB.NET 변환기가 개선됨<ref>{{웹 인용 |url=http://msdn2.microsoft.com/en-us/library/ms379614.aspx |제목=비주얼 베이직 2005에서 비주얼 베이직 업그레이드 마법사의 새로운 기능 |확인날짜=2011-01-16 |보존url=https://web.archive.org/web/20080406035326/http://msdn2.microsoft.com/en-us/library/ms379614.aspx |보존날짜=2008-04-06 |url-status=dead }}</ref>
* 자유 리소스가 처분 [[디자인 패턴|패턴]]을 필요로 하는 개체 사용의 단순화하는 'Using' 키워드
* 디버그할 때 비주얼 스투디오 .NET IDE와 시스템 라이브러리 코드가 쓴 보일러 플레이트 코드를 건너뛰게 해주는 'Just My Code'
* [[데이터베이스]] 서버/클라이언트 개발을 쉽게 만들어 주는 데이터 소스 묶기

위의 기능들(특히 'My')은 [[고속 응용 프로그램 개발]] 플랫폼으로서 비주얼 베이직 닷넷의 집중을 강화하고 더 나아가 [[C 샤프|C#]]와 차별화하려는 의도이다.

비주얼 베이직 2005는 '더욱 강력한' 다른 .NET 언어들과 차이를 줄이기 위해서 다음과 같은 기능들을 추가로 소개했다:
* [https://web.archive.org/web/20080403100913/http://msdn2.microsoft.com/en-us/library/ms379584.aspx .NET 2.0 언어 기능]은 다음과 같다:
** [[제네릭 프로그래밍|제네릭스]]<ref>{{웹 인용 |url=http://msdn2.microsoft.com/en-us/library/ms379608.aspx |제목=비주얼 베이직 2005에서 제네릭스 정의 및 사용<!-- Bot generated title --> |확인날짜=2011-01-16 |보존url=https://web.archive.org/web/20080423004351/http://msdn2.microsoft.com/en-us/library/ms379608.aspx |보존날짜=2008-04-23 |url-status=dead }}</ref>
** 하나의 파일에 클래스의 일부를 정의하고 나중에 더 많은 정의를 추가하는 방법인 [[클래스 (컴퓨터 과학)|부분적 클래스]]. 특히 자동 생성 코드와 사용자 코드를 통합하는 데 유용하다
** [[널인 자료형]]<ref>{{웹 인용 |url=http://msdn2.microsoft.com/en-us/library/ms379613.aspx |제목=비주얼 베이직 2005에서 연산자 오버로드 |확인날짜=2011-01-16 |보존url=https://web.archive.org/web/20080423001343/http://msdn2.microsoft.com/en-us/library/ms379613.aspx |보존날짜=2008-04-23 |url-status=dead }}</ref>
* [[unsigned|부호 없는 정수]](unsigned) 자료형을 지원

==== 특허된 'IsNot' 연산자 ====
비주얼 베이직 2005의 또 다른 특징은 <code>'If Not X is Y'</code>를 <code>'If X IsNot Y'</code>와 동일하게 만드는 <code>IsNot</code> 연산자이다. 이 연산자는 마이크로소프트가 특허 응용 프로그램으로 발표했을 때 혹평을 받았다.<ref>{{웹 인용|url=http://www.theregister.co.uk/2005/02/22/real_slams_ms_patent/ |title=Real Software slams MS IsNot patent application |last=Sherriff |first=Lucy |publisher=The Register |date=2005년 2월 22일 |accessdate=2009년 4월 9일}}</ref><ref>{{웹 인용 |url=http://www.eweek.com/article2/0,1759,1766949,00.asp |title=Real Software Slams Microsofts Patent Effort |last=Taft |first=Darryl K. |publisher=eWeek |date=2005년 2월 21일 |accessdate=2009년 4월 6일 |archive-date=2012년 7월 31일 |archive-url=https://archive.today/20120731141459/http://www.eweek.com/article2/0,1759,1766949,00.asp |url-status= }}</ref><ref>{{웹 인용 |url=http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PG01&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.html&r=1&f=G&l=50&s1=%2220040230959%22.PGNR.&OS=DN/20040230959&RS=DN/20040230959 |title=United States Patent Application: 20040230959 |last=Vick |first=Paul A. Jr. |coauthors=Barsan, Costica Corneliu; Silver, Amanda K. |date=2003년 5월 14일 |work=IS NOT Operator |publisher=US Patent & Trademark Office |accessdate=2009-04-06 |archive-date=2014-08-19 |archive-url=https://web.archive.org/web/20140819232938/http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PG01&p=1&u=/netahtml/PTO/srchnum.html&r=1&f=G&l=50&s1=%2220040230959%22.PGNR.&OS=DN/20040230959&RS=DN/20040230959 |url-status= }}</ref>

=== 비주얼 베이직 2008(VB 9.0) ===
비주얼 베이직 9.0은 2007년 11월 19일에 [[닷넷 프레임워크#닷넷 프레임워크 3.5|마이크로소프트 닷넷 프레임워크 3.5]]와 함께 출시되었다.

이 버전에서 마이크로소프트는 많은 기능을 추가하였다:
* 참인 [[조건 연산자]], 'If(논리값, 참 값, 거짓 값)'를 'IIf' 함수로 교체하였다.
* [[익명 자료형]]
* [[LINQ]] 지원
* [[람다 표현식]]
* [[XML 문자]]
* [[자료형 추론]]
* [[확장법]]

=== 비주얼 베이직 2010(VB 10.0) ===
2010년 4월, 마이크로소프트는 비주얼 베이직 2010을 출시하였다. 마이크로소프트는 이번 버전<ref>{{웹 인용
| url = http://www.panopticoncentral.net/archive/2007/05/01/20383.aspx
| title = 도대체 "VBx"라는 것은 무엇인가?
| date = 2007년 5월 1일
| quote = ''새로운 DLR으로, 우리는 IronPython, IronRuby, 자바스크립트, 그리고 새로운 동적 VBx 컴파일을 위해 지원한다''
| accessdate = 2009년 8월 12일
| archive-date = 2009년 5월 25일
| archive-url = https://web.archive.org/web/20090525130300/http://panopticoncentral.net/archive/2007/05/01/20383.aspx
| url-status = 
}}</ref>에 [[동적 언어 런타임|동적 언어 런타임(DLR)]]을 사용하기로 결정했지만 비주얼 베이직과 자매 언어 C# 사이의 동등성을 높이기 위해 공동 진화 전략으로 변경되었다. CLR과 COM 개체와 동적 상호 작용하는 비주얼 베이직의 타고난 능력은 [[IronPython]]과 [[IronRuby]] 같은 DLR에 빌드된 동적 언어와 작동하도록 향상되었다.<ref>{{웹 인용
| url = http://msdn.microsoft.com/en-us/library/we86c8x2%28VS.100%29.aspx
| title = What's New in Visual Basic 2010
| year = 2009년
| publisher = Microsoft
| quote = ''Visual Basic binds to objects from dynamic languages such as IronPython and IronRuby''
| accessdate = 2009-08-12}}</ref> 비주얼 베이직 컴파일러는 대부분의 경우에 줄 연결 문자 '_'의 필요를 없애고 일반적인 콘텍스트의 집합에서 행 연속으로 추정하도록 개선되었다. 또한 기존 인라인 함수 지원은 Sub와 함수 람다의 여러-줄 버전뿐만 아니라 인라인 Sub에 대한 지원을 구비하였다.<ref>{{웹 인용| url=http://msdn.microsoft.com/en-us/vbasic/ee336123.aspx | title=What's New in Visual Basic 2010 | year=2010 | publisher=Microsoft | accessdate=2010-08-01}}</ref> 또 다른 새로운 점은 이전 버전과는 달리 디버그 모드에서 일시 중지된 응용 프로그램의 소스 코드를 더 이상 편집할 수 없다.

=== 비주얼 베이직 2012(VB 11.0) ===
[[닷넷 프레임워크]] 4.5를 이용한다. 비동기 기능, 반복자, 호출 계층(Call Hierarchy), 호출자(Caller) 정보와 [[이름공간]]에 넣는 전역(Global) 키워드가 주요 기능이다.

== 비주얼 베이직 이전 버전(VB6과 그 이전)과의 관계 ==
비주얼 베이직 .NET을 비주얼 베이직의 또 다른 버전으로 구분해야 하느냐 아니면 완전히 다른 언어로 구분해야 하느냐는 논쟁의 대상이다. 이는 명확하지 않은데, 우회하거나 자동으로 변환시키는 방법이 있기 때문이며, 언어의 기본 [[문법]]이 많은 "파괴적" 변화를 겪지 못했고 단지 추가로 [[예외 처리|구조적 예외 처리]]와 단절 회로(short-circuited) 표현 같은 새로운 기능을 지원하기 때문이다. VB.NET로 이동하면서 두 가지 중요한 데이터 형식 변경이 일어났다. VB6에 비해, <code>Integer</code> [[자료형]]은 16비트에서 32비트로, <code>Long</code> [[자료형]]은 32 비트에서 64 비트로 길이가 두 배로 되었다. 이것은 VB.NET의 모든 버전이 다 그러하다. VB.NET의 모든 버전에서 16비트 정수는 이제 <code>Short</code>로 인식되지 않는다. 마찬가지로, [[윈도 폼]] [[그래픽 사용자 인터페이스|GUI]] 편집기는 스타일과 기능 면에서 비주얼 베이직 양식 편집기와 매우 비슷하다.

새로운 비주얼 베이직(7, 7.1, 8, 9, ...)에 사용되는 버전 번호는 마이크로소프트가 여전히 본질적으로 이전 비주얼 베이직과 같은 제품으로 보고 있다는 것을 의미한다고 볼 수 있다.

크게 바뀐 것은 [[의미론]]이다. 비주얼 베이직은 [[컴포넌트 오브젝트 모델|COM]]을 기반으로 한 [[결정론]]적 [[참조 횟수 계산 방식|참조횟수 계산]] 엔진에서 실행되는 객체 기반 프로그래밍 언어의 의미론이었으며, 비주얼 베이직 닷넷은 공용 언어 런타임([[JIT 컴파일]] 엔진과 [[쓰레기 수집 (컴퓨터 과학)#세대적 GC (임시적 별명 GC)|세대 쓰레기 수집]]을 사용하는 [[가상 머신]])과 훨씬 더 큰 [[라이브러리]]의 결합으로 구성되고 [[닷넷 프레임워크|.NET 프레임워크]]에서 지원되는 객체 지향 언어이다. 비주얼 베이직 닷넷의 폭넓은 증가는 비주얼 스튜디오 2005의 '마이' 기능에서도 어느 정도 다루긴 했지만, VB 개발자가 언어에 접근할 때 감당해야 하는 문제이기도 하다.

이 변화는성능과 유지보수의 관점에서 해야할 일들에 대한 많은 기본적인 가정을 바꿔놓았다. 일부 기능과 라이브러리는 더 이상 존재하지 않는다. 나머지들은 사용할 수 있지만, 원래 .NET의 대안만큼 효율적이지 않다. 그들은 컴파일하더라도, 대부분의 변환된 VB6 애플리케이션은 새로운 언어를 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchperfopt.asp 최대한 활용]하기 위해 어느 정도의 [[리팩토링]]이 필요하다. 문법, 디버깅 애플리케이션, 배치 및 용어의 변경을 다루는 문서를 제공한다<ref>[http://msdn2.microsoft.com/en-us/vbrun/ms788233.aspx 마이그레이션 - 비주얼 베이직 6.0으로부터 업그레이드] {{웨이백|url=http://msdn2.microsoft.com/en-us/vbrun/ms788233.aspx |date=20080420052441 }} MSDN ? 개발자 센터 ? 비주얼 베이직 6.0 자원 센터 ? 이주 ?</ref>

=== 비교 예제 ===
다음의 간단한 예제는 VB 및 VB.NET 사이에서 구문의 유사성을 보여준다. 두 예제는 모두 OK 버튼과 함께 "Hello, World"라는 메시지 상자를 띄운다.
<syntaxhighlight lang="vb">
Private Sub Command1_Click()
    MsgBox "Hello, World"
End Sub
</syntaxhighlight>

비주얼베이직 닷넷 예제에서 MsgBox 또는 MessageBox 클래스는 이렇게 쓰일 수 있다.

<syntaxhighlight lang="vbnet">
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Msgbox("Hello, World")
    End Sub
End Class
</syntaxhighlight>
<syntaxhighlight lang="vbnet">
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show("Hello, World")
    End Sub
End Class
</syntaxhighlight>
* 해당 버튼이 디자인 보기에서 클릭되면, 비주얼 베이직 6과 비주얼 베이직 닷넷이 자동으로 <code>Sub</code> 와 <code>End Sub</code> 구문을 생성한다. 비주얼 베이직 닷넷은 또한 필수적인 <code>Class</code> 와 <code>End Class</code> 구문을 생성한다. 개발자는 "Hello, World" 메시지 상자를 표시하기 위해 문장을 추가한다.
* 함수 프로시저(괄호 필요)과 서브 프로시저(<code>Call</code> 키워드를 사용하여 호출되지 않으면 괄호는 허용되지 않는다)에 대해 서로 다른 규약들이 VB6에는 있는 반면에, 모든 프로시저 호출은 VB.NET에서 괄호로 만들어져야 한다.
* 또한 <code>Command1</code>과 <code>Button1</code>이라는 이름은 필수 사항이 아니다. 그러나 VB6과 VB.NET에서 이들은 각각 명령 버튼에 대한 기본 이름이다.
* VB.NET에서는, <code>Handles</code> 키워드는 <code>Button1</code> 객체의 <code>Click</code> 이벤트에 대한 서브 <code>Button1_Click</code> 핸들러를 만드는 데 사용된다. VB6에서핸들러 서브는 객체의 이름("Command1"), 밑줄("_"), 이벤트 이름("Click", 따라서 "Command1_Click")으로 구성된 특정 이름을 반드시 사용해야 한다.
* VB6에서 해당 함수와 비슷하게 사용할 수 있는 <code>Microsoft.VisualBasic</code> 이름공간의 <code>MsgBox</code>라는 함수가 있다. 여기에 대해서 어느 함수가 가장 나은 방법이냐는 논란이 있다.(메시지 상자 표시에 국한된 것이 아니라 <code>Microsoft.VisualBasic</code> 이름공간의 다른 기능에 관한 것도 포함된다) 일부 프로그래머는 "닷넷 방식"을 선호하며, 프레임워크 클래스가 더 많은 기능을 갖고 있고 덜 구체적인 언어이기 때문이라고 말한다. 다른 사람들은 구체적인 언어 기능을 사용하는 것이 코드를 읽기 쉽게 만들어 준다고 주장한다.(예를 들어, <code>System.Int32</code> 대신 <code>int</code>(C#)나 <code>Integer</code>(VB.NET)를 사용).
* VB 2008에서, <code>ByVal sender as Object, ByVal e as EventArgs을 포함하는 것이</code> 선택 사항이 되었다.

다음의 예제는 VB6와 VB.NET 간의 차이점을 보여준다. 두 예제들은 모두 활성화된 창을 닫는다.

VB 예제:

<syntaxhighlight lang="vb">
Sub cmdClose_Click()
    Unload Me
End Sub
</syntaxhighlight>

VB.NET 예제:

<syntaxhighlight lang="vbnet">
Sub btnClose_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClose.Click
    Me.Close()
End Sub
</syntaxhighlight>

이전에 언급한 새로운 규칙을 따라, 'cmd' 접두사는 'btn' 접두사로 교체되었다

비주얼 베이직 6은 일반적인 연산자 단축키를 제공하지 않는다. 다음은 서로 동일하다:

VB6 예제:

<syntaxhighlight lang="vb">
Sub Timer1_Timer()
    Me.Height = Me.Height - 1
End Sub
</syntaxhighlight>

VB.NET 예제:

<syntaxhighlight lang="vbnet">
Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
    Me.Height -= 1
End Sub
</syntaxhighlight>

== 비평 ==
초기 버전에서는 VB6(마이크로소프트가 더 이상 판매하지 않음)에서 사용 가능했던 언어 구조와 사용자 인터페이스 기능이 대폭 축소되었고 남아있던 VB6의 의미론이 바뀌었기 때문에 비주얼 베이직 사용자들은 이에 대해 오랫동안 불평해왔다. 예를 들어, VB.NET 매개 변수는(기본적으로) 참조가 아니라 값에 의해 전달된다. 비판자들은 VB.NET을 '비주얼 프레드'또는 'DOTNOT'<ref name="vfred_peterson">{{웹 인용|url=http://vb.mvps.org/vfred/Trust.asp |title=마이크로소프트 베이직: 1976-2001,R.I.P. |author=Karl E. Peterson |work=http://vb.mvps.org |accessdate=2009년 5월 7일}}</ref>처럼 경멸적으로 부른다. 2005년 3월 8일, 마이크로소프트가 VB6에 대한 주요 지원<ref>[http://msdn.microsoft.com/en-us/vbrun/ms788707.aspx 비주얼 베이직 6.0을 위한 제품군 주기 안내서]</ref>을 확장하는 것을 거절한 데 대한 대응으로 청원<ref>{{웹 인용 |url=http://classicvb.org/petition/ |제목=마이크로소프트에 청원 |확인날짜=2014년 4월 5일 |보존url=https://web.archive.org/web/20140407062147/http://www.classicvb.org/Petition/ |보존날짜=2014년 4월 7일 |url-status=dead }}</ref>이 제기되었다.

VB.NET의 지지자들은 새로운 언어가 대부분의 측면에서 이전 버전보다 더 강력하며, 초기 버전보다 자연스럽고, 일관되며, 완전한 방식으로 현대적인 객체 지향 프로그래밍 패러다임을 통합하는 것이 가능하다고 말한다. 반대자는 VB6은 자신의 개체 모델에서 결함을 가지고 있기는 하지만, VB.NET로 변환하여 얻을 수 있는 모든 혜택에 비해, 재개발 측면의 비용이 너무 높다고 반박한다.

VB.NET을 포함한 [[공통 중간 언어]](CIL)를 대상으로 한 언어는 [[기계 코드]]로 컴파일되는 언어에 비해 [[디컴파일러|디컴파일]]하기 쉽다. [[.NET 리플렉터]] 같은 도구는 CIL에서 제공하는 [[메타데이터]]의 양이 많기 때문에 원래 코드에 가까운 결과물을 제공한다.

마이크로소프트는 비주얼 스튜디오 .NET에 자동화된 VB6-VB.NET 변환기를 공급하고 있고, 시간이 지나면서 개선되긴 했지만 모든 코드를 변환할 수 없으며 거의 모든 중대한 프로그램들을 컴파일하려면 약간의 수동적인 노력이 필요하다. 대부분은 최적으로 작동하게 하려면 [[리팩토링]]이 어느 정도 수준으로 필요하다. 자연적으로 알고리즘적 비주얼 베이직 프로그램은 마이그레이션하는데 몇 가지 어려움이 있다. 데이터베이스 지원, 그래픽, 관리되지 않는 운영 또는 구현 세부 정보에 같은 기능에 크게 의존하는 프로그램들이 더 골칫거리다.

또한 VB.NET 프로그램은 상당히 큰 [[닷넷 프레임워크]]의 설치를 요구하는 반면, VB6 프로그램에 필요한 [[런타임 시스템|런타임]] 라이브러리가 [[윈도우 98 SE]]와 그 이상에 제공된다. 이 프레임워크는 [[윈도우 7]], [[윈도우 비스타]], [[윈도우 XP 미디어 센터 에디션]], [[윈도우 XP 태블릿 PC 에디션]], [[윈도우 서버 2008]]과 [[윈도우 서버 2003]]에 포함되었다. 지원되는 다른 운영체제에는 [[윈도우 2000]] 또는 [[윈도우 XP|윈도우 XP(홈 또는 프로페셔널 에디션)]]이 있으며 별도로 설치되어 있어야 한다.

개발자 불만족에 대한 마이크로소프트의 대응은 새로운 개발로 쉽게 이동하고 기존의 코드베이스를 VB6에서 VB.NET으로 변환하도록 하는데 초점을 맞추었다. 그들은 최신 코드 예제와 문서를 [http://msdn.microsoft.com/VBRun/ VB런 웹사이트]에서 제공한다:
* 인쇄 미리보기를 만드는 것과 같이, VB6에서는 일반적인 작업을 VB.NET을 사용하여 완료하는 데 사용.
* VB6과 VB.NET 솔루션 통합.(''VB 융합''으로 불림)

== 크로스 플랫폼 및 오픈-소스 개발 ==
VB.NET 개발을 위한 오픈-소스 도구의 탄생은 [[모노 (소프트웨어)|모노]] 개발 플랫폼이 [[윈도 폼]] GUI 라이브러리와 같은 표준 프레임워크 라이브러리뿐만 아니라, VB.NET 라이브러리 및 VB.NET에서 작성된 VB.NET 8.0 호환 [[컴파일러]]의 구현<ref>[http://www.mono-project.com/VisualBasic.NET_support 모노 프로젝트: 비주얼베이직 닷넷 지원]</ref>을 제공함에도 불구하고 [[C 샤프|C#]]에 비해 느리다.

[[샤프디벨롭]]과 [[모노디벨롭]]은 [[오픈 소스|오픈-소스]] 대안 [[통합 개발 환경|IDE]]이다.

== 예제 ==
다음은 매우 간단한 VB.NET 프로그램이며, 콘솔 애플리케이션으로 만든 "[[Hello world]]" 예제의 고전적인 버전이다.

<syntaxhighlight lang="vbnet" line>
Module Module1
    Sub Main()
        Console.WriteLine("Hello, world!")
    End Sub
End Module
</syntaxhighlight>

결과는 명령 줄에 ''Hello, world!''를 작성하는 것이다. 각 행은 다음과 같은 특정한 목적을 제공한다:

* 1행: 모듈 정의이고, [[클래스 (컴퓨터 과학)|클래스]]와 유사한 분류의 코드이지만, 모듈은 클래스를 포함할 수 있다. 모듈은 프로그램의 다른 부분에서 참조할 수 있는 코드의 컨테이너 역할을 한다.<ref>{{웹 인용|url=http://msdn.microsoft.com/en-us/library/aaxss7da(VS.80).aspx |title=모듈 정책 |author= |work= |publisher=MSDN - 개발자 센터 |accessdate=2010년 1월 20일}}</ref> 이것은 자신을 포함하여, 같은 이름을 가지는 모듈과 코드 파일에 대한 일반적인 관행이다. 그러나 이것은 단일코드의 파일이 하나 이상의 모듈 및 클래스 정의를 포함할 수 있으므로 필수적이지 않다.

* 2행: 프로그램이 실행을 시작하는 진입점이다.<ref>{{웹 인용|url=http://msdn.microsoft.com/en-us/library/ms235406(VS.80).aspx |title=비주얼 베이직에서 주요한 절차|author= |work= |publisher=MSDN - 개발자 센터 |accessdate=2010년 1월 20일}}</ref> <code>Sub</code>는 "서브루틴"의 약어이다.

* 3행: 이 행은 출력을 작성하는 실제 작업을 수행한다. 콘솔은 [[명령줄 인터페이스]]를 나타내고, 운영체제의 [[표준 스트림]]에 프로그램 접근 권한을 부여하는 시스템 개체이다. 이 프로그램은 문자열을 콘솔에 표시하도록 전달해주는 콘솔 메서드 <code>WriteLine</code>을 호출한다. 또 다른 일반적인 방법은 <code>MsgBox(메시지 상자</code>)를 사용하는 것이다.<ref>{{웹 인용|url=http://msdn.microsoft.com/en-us/library/3cf7t4xt(VS.80).aspx |title=비주얼 베이직 버전의 Hello, world|author= |work= |publisher=MSDN - 개발자 센터 |accessdate=2010년 1월 20일}}</ref>

아래 코드 조각은 [[플로이드의 삼각형]]의 해답이다.
<syntaxhighlight lang="vbnet">
Imports System.Console

Module Program

    Sub Main()
        Dim rows As Integer

        ' 유효성 검사를 입력한다.
        Do Until Integer.TryParse(ReadLine("얼마나 많은 행을 표시할 것인지에 대한 값을 입력하시오: "), rows) AndAlso rows >= 1
            WriteLine("허용된 범위는 1과 {0}이다", Integer.MaxValue)
        Loop

        ' 플로이드의 삼각형의 출력
        Dim current = 1

        For row = 1 To rows
            For column = 1 To row
                Write("{0,-2} ", current)
                current += 1
            Next

            WriteLine()
        Next
    End Sub

    ''' <요약>
    ''' 프롬프트 문자열이 사용하는 Console.ReadLine 및 버전을 보호한다.
    ''' </요약>
    Function ReadLine(Optional prompt As String = Nothing) As String
        If prompt IsNot Nothing Then
            Write(prompt)
        End If

        Return Console.ReadLine()
    End Function

End Module
</syntaxhighlight>

== 같이 보기 ==
* [[마이크로소프트 비주얼 스튜디오]]
* [[마이크로소프트 비주얼 스튜디오 익스프레스]]
* [[비주얼 베이직 닷넷과 C 샤프의 비교|비주얼 베이직 닷넷과 C#의 비교]]
* [[비주얼 베이직 포 애플리케이션]]
* [[프로그래밍 언어의 비교]]

== 참고 문헌 ==
# {{웹 인용|url = http://www.microsoft.com/downloads/en/details.aspx?FamilyId=6D50D709-EAA4-44D7-8AF3-E14280403E6E&displaylang=en |title = 비주얼 베이직 언어 사양 8.0 |publisher = 마이크로소프트 회사 |date = 2005년 11월 15일 |accessdate = 2010년 12월 10일}}

== 각주 ==
{{각주|2}}

== 외부 링크 ==
{{위키책|비주얼 베이직 닷넷}}
* [http://msdn.microsoft.com/vbasic/ 비주얼 베이직 개발자 센터]
* [http://vb.net-informations.com 비주얼 베이직 강좌]
* [https://web.archive.org/web/20081201204535/http://msdn.microsoft.com/vstudio/express/vb/default.aspx 마이크로소프트 비주얼 베이직 익스프레스]
* [http://blogs.msdn.com/vbteam/ 비주얼 베이직 팀 블로그]

{{닷넷 프레임워크}}
{{마이크로소프트 개발 도구}}
{{베이직}}

{{전거 통제}}

[[분류:베이직 예제 코드가 있는 문서]]
[[분류:베이직 프로그래밍 언어 계열]]
[[분류:닷넷 프로그래밍 언어]]
[[분류:마이크로소프트 비주얼 스튜디오|베이직 닷넷]]
[[분류:마이크로소프트 베이직]]
[[분류:2001년 도입]]
[[분류:객체 지향 프로그래밍 언어]]
[[분류:마이크로소프트의 프로그래밍 언어]]