2009-12-03 2 views
3

주어진 문제 영역에 대해 Visual Studio 2008에 C# 기반 솔루션이 있습니다. 이 솔루션에는 1 + 5 개의 프로젝트가 있습니다. 첫 번째 프로젝트는 다른 5 개 프로젝트에 걸쳐있는 리소스입니다.HOWTO 단일 빌드에서 여러 폼을 사용하는 여러 프로젝트를 사용하여 VS 2008의 C# 솔루션 용 독립 실행 형 실행 파일을 폼에 생성 하시겠습니까?

각 프로젝트에는 여러 가지 양식이 있습니다. 기본적으로 빌드는 프로젝트 당 하나의 실행 파일을 생성합니다. 독립된 실행 파일을 생성하기 위해 나머지 폼과의 상호 의존성이없는 각 폼을 원합니다.

저는 5 개의 주요 프로젝트 각각을 여러 프로젝트로 나누고 "시작 프로젝트"를 "여러 개의 시작 프로젝트"로 설정하고 내 목표를 달성 할 수 있음을 알고 있습니다. 그러나 이는 두 자리 수 중반으로 증가하는 프로젝트의 수를 초과하여 솔루션을 과부하 할 것입니다. 저는 5 개 프로젝트 각각에 대해 별도의 솔루션을 제공하는 경로를 추구하고 싶지 않습니다.

Application.Run(new fooForm()); 

내가 다른 독립적 인 형태에 대한 실행 파일을 만들 필요가있을 때, 나는

Application.Run(new barForm()); 
에 양식 값을 변경 : 내 목표를 달성하기 위해 다음과 같이

는 지금은 Application.Run를 호출

등등. 나는 또 다른 에스프레소 샷이 필요할 때까지 계속한다.

내가 창 밖으로 뛰어 내리지 않고 내가하려는 것을 달성하기위한 해킹이 있습니까?

+0

는 "여러 프로젝트에 5 개 주요 프로젝트의 각 휴식은"-이 비주얼 스튜디오를 사용하여 여러 EXE 파일을 생성 할 수있는 유일한 방법입니다 . 무엇을 성취하려고합니까? –

+0

프로젝트의 각 양식은 단일 데이터베이스와 대화하여 보고서를 작성하며 해당 솔루션의 다른 양식 및 다른 솔루션의 다른 양식과는 독립적입니다. 현재 실행 파일은 Application.Run의 값을 수동으로 한 번에 하나씩 수동으로 대체하여 만듭니다. fooForm, barForm 등의 실행 파일을 자동화 된 방법으로 만들고 싶습니다. 수동으로 수행하지 않아도됩니다. 감사. –

답변

0

원하는 것을 제공하기 위해 Visual Studio에 내장 된 기능은 없습니다.

내가 창 밖으로 뛰어 내리지 않고 무엇을 할 것인가? 당신이 해킹 후 경우

, 당신은 포스트 빌드 단계의 일부로서 Ilasm.exe를하고 Ildasm.exe를 실행보고 할 수 있습니다 : 5 EXE 파일을 분해하고 무엇에 따라> 5 EXE 파일로 재 조립 당신이 따르고있는 규칙.

+0

@ Tim Robinson : 귀하의 추천에 감사드립니다. 시간과 숙련도가 부족하여 ilasm.exe, ildasm.exe를 사용하는 경로를 연기했습니다. –

0

템플릿 .csproj을 작성하고 작은 C# 또는 Perl 프로그램으로 파일을 많이 작성하여 솔루션의 양식을 기반으로하는 값으로 템플릿을 채울 것을 제안합니다. 그런 다음 명령 줄에서 devenv.exe을 사용하여 컴파일을 위해 일괄 또는 Perl 스크립트를 사용하여 .csproj 파일을 집계 할 수 있습니다.

실제 "깨끗한"방법이 없습니다.

+0

@sixlettervariables : 귀하의 추천과 올리버 존 (Oliver John 's)을 결합하여 내 콘텐츠에 맞는 스크립트 묶음을 만들었습니다. 당신은 옳습니다, "깨끗한"방법이 아닙니다! –

2

아마도 프로젝트 당 하나의 EXE 파일에 모든 것을두고 실행 시간에 어떤 Form을 시작 할지를 결정할 수있는 옵션 일 것입니다. 예를 들어, 다른 이름하여 EXE 파일의 복사본을 만들 수

Assembly.GetExecutingAssembly().Location 

에서 EXE의 이름을 확인하고 'Application.Run'에 넣어 양식을 선택하기 위해이 정보를 사용합니다.

또는 복사본을 만들고 적절한 명령 줄 매개 변수로 EXE를 호출하지 마십시오. 사용자가 다른 데이터베이스 보고서를 선택하는 방법에 따라 다릅니다.

편집 : 그냥 EXE - 파일을 다른 이름을 사용하는 문서 브라운의 아이디어를 사용

[STAThread] 
static void Main(string[] args) 
{ 
    if(args.Length<1) 
     return; 
    if(args[0]=="Form1") 
     Application.Run(new Form1()); 
    else if(args[0]=="Form2") 
     Application.Run(new Form2()); 
} 
+0

프로젝트 당 하나의 .exe 파일에 모든 것을 남겨 둘 수있는 실용적인 옵션입니다. 나는 당신의 권고의 첫 부분을 실험하려고한다. 명령 줄 매개 변수를 기반으로 다른 양식을 실행하기 위해 여러 양식이 번들로 제공되는 단일 .exe를 호출하는 방법에 대한 예제를 알려주십시오. –

1

은, 다음의 코드가 같은과 양식을 사용하여 응용 프로그램을 실행합니다 : 여기 (안된) 간단한 예입니다 EXE 파일로 이름을

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     string FullPath = Assembly.GetExecutingAssembly().Location; 
     string ExeName = Path.GetFileNameWithoutExtension(FullPath); 
     Type TypeBasedOnExeName = Assembly.GetExecutingAssembly().GetType(ExeName); 
     Form StartupForm = (Form)Activator.CreateInstance(TypeBasedOnExeName); 

     Application.Run(StartupForm); 
    } 
+0

@ 올리버 존 : 고마워. 귀하의 추천과 여섯 개의 문자 변수를 결합하여 내 콘텐츠에 맞는 스크립트 배치를 만들었습니다. –

2
  1. 각 폼 클래스에 기본 기능 추가 (MyNamespace.MyForm.exe은 시작-형태로 MyNamespace.MyForm와 응용 프로그램을 시작합니다)하고 그 자체를 실행해야합니다.
  2. 명령 줄 컴파일러 (Csc의 경우 csc.exe)를 사용하여 사용할 Main 메서드가 들어있는 클래스 (양식)를 지정하여 프로젝트를 컴파일하려면 form/exe별로 배치 파일을 만듭니다.

    public partial class Form2 : Form 
    { 
        [STAThread] 
        static void Main() 
        { 
        Application.EnableVisualStyles(); 
        Application.SetCompatibleTextRenderingDefault(false); 
        Application.Run(new Form2()); 
        } 
    } 
    

같은 것을 사용하여 Form2를위한 실행 컴파일

csc.exe /out:Form2.exe Form2.cs Form2.designer.cs /Main:WindowsFormsApplication1.Form2