2010-01-09 2 views
32

어떻게 Visual Studio에서 독립 실행 형 exe를 만들 수 있습니까? 사용자가 작은 콘솔 응용 프로그램을 설치하고 싶지 않은 단순한 콘솔 응용 프로그램입니다. Visual Studio 명령 프롬프트를 사용하여 간단한 cpp 파일을 컴파일했습니다. .NET Framework가 설치되어 있지 않아도 exe가 작동합니까? 네이티브 C++ 코드를 사용했습니다.Visual Studio에서 독립 실행 형 실행 파일 (.exe)로 컴파일

+0

.NET 런타임이없는 사용자도 설치가 필요없는 .exe를 만드는 방법을 묻는 질문이 있으십니까? – RedFilter

+2

C++에서 asveikau를 사용할 수 있습니까? 그것에 관한 어떤 기사? –

+0

ILMerge가 나중에이 중복 게시물에 제안되었습니다. http://stackoverflow.com/questions/3261942/net-whole-application-as-a-single-exe-file – JohnLBevan

답변

19

관리되는 환경 (C# 및 VB.NET으로 작성된 항목 포함)을 사용하는 경우 .NET Framework가 필요합니다. 이 시나리오에서 .EXE를 단순히 재배포 할 수는 있지만 이미없는 경우 적절한 프레임 워크를 설치해야합니다.

+0

C++/CLI 또는 네이티브 C++를 사용하여이를 exe로 컴파일 할 수 있습니까? –

+1

그것은 무엇이든 상관없이 exe로 컴파일됩니다. 하지만 .NET을 설치하지 않으면 실행하면 오류가 반환됩니다. – jalf

+0

navtive C++? –

45

프로젝트 폴더 안에는 bin 폴더가 있습니다. bin 폴더에는 Release와 Debug라는 두 개의 폴더가 있습니다. 세련된 .exe의 경우 릴리스 폴더로 이동하려고합니다. 개봉은 내가 @Marlon에 동의

+2

이것은 나를 위해 일했다 –

+0

이것은 나를 위해 일했다, 위선적 인 말은 이것을 발견 할 때까지 얼마나 오래 봐야한다고 생각한다. –

+6

아직 빌드되지 않은 경우 빌드> 구성 관리자에서 릴리스 옵션을 선택하여 릴리스 버전을 빌드해야합니다. – brandaemon

3

묻는 것을 먹으 렴 경우

나는 아주 확실하지 않다. 릴리스 구성으로 C# 프로젝트를 컴파일하면 프로젝트의 "bin/Release"폴더에서 응용 프로그램의 실행 파일을 찾을 수 있습니다. 이 기능은 간단한 응용 프로그램에서 작동해야합니다.

그러나 응용 프로그램에서 일부 외부 DLL에 대한 종속성이있는 경우 VisualStudio를 사용하여 SetupProject를 만드는 것이 좋습니다. 이렇게하면 프로젝트 마법사가 응용 프로그램의 모든 종속성을 찾아 해당 폴더 (librairies)를 설치 폴더에 추가합니다. 마지막으로, 사용자 컴퓨터에서 설정을 실행하고 소프트웨어를 설치하기 만하면됩니다.

1

저는 C# 그대로의 소형 콘솔 응용 프로그램을 배포하는 데 전혀 문제가 없었습니다. 충돌 할 수있는 유일한 문제는 .NET 프레임 워크에 대한 종속성이지만 중요한 문제는 아닙니다. 이미 대부분의 PC에 있어야하는 프레임 워크 버전 2.0을 사용해 볼 수 있습니다.

관리되지 않는 네이티브 C++를 사용하면 .NET Framework에 대한 종속성이 없어야하므로 실제로 안전해야합니다. 실행 파일과 첨부 파일 (있는 경우)을 잡고 그대로 배포하십시오. 당신이 원하지 않으면 그들을 설치할 필요가 없습니다.

18

내가 올바르게 이해할 수 있지만 가능합니다.하지만 알고있는 Visual Studio에서는 사용할 수 없습니다. 컴파일러가 실제 독립 실행 파일 (다른 언어와 마찬가지로 C#을 사용한다는 것을 의미)을 생성하도록하려면 mkbundle (Mono와 함께 제공됨) 프로그램을 사용합니다. 이렇게하면 C# 응용 프로그램을 실제, 종속성 실행 파일로 컴파일합니다.

인터넷에 관한 많은 오해가 인터넷 주위에 있습니다. 이러한 기능을 처음부터 사용하지 않았다면 .net 프레임 워크의 향후 기능을 어떻게 잃을 수 있기 때문에 일부 사람들의 상태와 같은 .net 프레임 워크의 목적을 상쇄하지는 못합니다. 그리고 앱을 업데이트 할 때 설치 프로그램을 빌드하기 전에 mkbundle 프로세서를 통해 실행하는 것은 어렵지 않습니다. 또한 네이티브 속도로 앱을 실행하는 속도 향상이 필요합니다 (현재 네이티브이므로).

C++ 또는 Delphi에서 동일한 시스템을 사용하지만 중간 MSIL 레이어는 없습니다. 따라서 네임 스페이스 또는 소스 파일 (Delphi에서 하나의 유닛이라고 함)을 사용하면 컴파일되어 최종 이진 파일에 포함됩니다. 따라서 최종 바이너리는 더 커질 것입니다 (실제 앱의 경우 읽기 : "보통"크기). .net에서 사용하는 프레임 워크의 부분도 마찬가지입니다. 이것도 앱에 포함되어 있습니다. 그러나 똑똑한 연결은 엄청난 양을 줄입니다.

희망이 있습니다.

0

저는 질문자가 모든 프로젝트 파일을 하나의 .exe로 병합하여 dll 지옥을 피하는 것이 무엇인지 묻는 것을 할 수 있다고 생각하지 않습니다.

프레임 워크 문제는 붉은 청어입니다. 문제는 한 라이브러리에 따라 여러 프로젝트가있을 때 라이브러리를 동기화 상태로 유지하는 PITA라는 것입니다. 라이브러리가 변경 될 때마다 그것에 의존하고 업데이트되지 않은 모든 .exes는 끔찍하게 죽을 것입니다.

한 응답으로 C를 배우라고 사람들에게 말하면 오만하고 무지합니다.