login register Sysop! about ME  
qrcode
    최초 작성일 :    2004년 11월 08일
  최종 수정일 :    2004년 11월 08일
  작성자 :    taeyo
  편집자 :    Taeyo (김 태영)
  읽음수 :    28,623

강좌 목록으로 돌아가기

필자의 잡담~

정말로 오랜만에 올리는 강좌가 아닌가 합니다. 죄송합니다. ㅠㅠ 과중한 프로젝트 업무로 인해.. 년말까지는 완조니 꼼짝마라네요.. ㅜㅜ 어서 태오 닷넷 사이트도 오픈해야 하는데.. 흠~

이번에 같이 해 볼 내용은 여러분이 Visual Studio .NET으로 프로젝트를 할 경우, 특히 팀이 같이 작업을 해야하는 경우매우 유용한... 프로젝트용 템플릿 웹 폼을 VS.NET 안에 나타나도록 만드는 방법에 대한 이야기입니다.

그림부터 보자면, 다음과 같이 나타내도록 한다는 것이죠

호곡!! 뭔가 쿨하지 않나요?? 히야~~~ 그쵸?? 그렇습니다.

어쩌면 여러분들도 말입니다.기본적으로 만들어지는 웹 폼의 HTML 코드나 코드 비하인드 파일의 소스 코드를 보면서 그런 생각해보신 적 있지 않나요?

"이거 분명 어딘가 이러한 코드의 템플릿이 있을 것 같아... 안 그렇고서야 모든 파일들이 이렇게 클래스명만 다르고 똑같이만들어질리가 없잖아~~~"

그 생각이 맞거든요~~~ 엘라쓰뎅~ -_-;;; (잠시 썰렁한 개그였습니다)

그렇습니다. 맞습니다... 어딘가에 그러한 웹 폼용 템플릿 파일과 코드 비하인드 파일용 템플릿 파일이 존재하는 것이죠...해서, 이번 시간에는 그러한 부분을 찾아서 나만의 웹폼이 VS.NET에서 추가적으로 나타날 수 있도록 하고자 합니다. 물론,나만의 웹폼은 나만의 코드와 나만의 코드 비하인드 코드를 가지도록 구성할 것이구요 ^^

이 작업을 위해서는 태오의 말을 믿고 따라하기 전법이 필요합니다. 솔직히 말하자면, 이러한 구성을 위해서는단지, VS.NET 설치 디렉터리에서 몇몇 폴더를 복사 및 변경하고, 몇몇 파일을 복사 및 변경해주면 되거든요.

왜 그렇게 해야하는 지는 제게 묻지 마세요.. ^^그것은 VS.NET 개발팀에게 물어보셔야 합니다. 그들이 그렇게 기존 구성을 해 둔 것이니까요 ^^우선... 일명 '나만의 웹폼'을 VS.NET에 추가적으로 나타내기 위해서... 기존의 기본 Web Form은 어떻게그 템플릿을 구성하고 있는지 살펴보도록 하겠습니다. 그것을 살펴보면... '나만의 웹폼'을 그에 맞춰서 추가해 주면 될테니 말입니다.

그렇다면, 이제 단계별로 한번 진행해 나아가 볼까요???(이 작업은 .NET 언어별로 약간의 차이가 있습니다. 이번 강좌는 C#의 경우를 다루어 보도록 하겠습니다)

참고

이 강좌는 Visual Studio .NET 2003을 기준으로 작성된 것입니다. 고로, 하위버전을 사용하시는 경우에는 일부 명칭이 다르거나,설정이 약간 차이가 있을 수 있습니다.

참고 2 : 결정적인 참고!!!

직접 강좌를 보면서 따라하기에는 시간이 부족하거나, 귀찮으신 분들을 위해서 미리 작업을 다 해 놓은 파일들을별도로 다운로드 하실 수 있습니다. 다운로드 받으신 후 하실 일은 단 하나!! 한번의 붙여넣기로 끝납니다.

하지만, 일단은 직접 따라해보시길 추천드리며, 잘 안되실 경우 이 강좌의 하단에서 파일을 다운로드 받아서한큐에 셋업을 마치시기 바랍니다. (다운로드 받기 및 설치방법 안내를 원하시면 클릭하세요)


"나만의 웹폼" 구성하고, 설치하기

1. VS.NET 설치 디렉터리로 일단 찾아가 봅니다. 기본 설치를 하셨다면 그 경로는C:\Program Files\Microsoft Visual Studio .NET 2003 일 것입니다.(저의 경우는 D 드라이브에 설치를 했기에, 그림은 D를 루트로 나오는 점 양해바랍니다)

2. 하위 폴더 중 VC#이라는 폴더를 확장합니다. 그러면, 그 안에는 여러 하위 폴더가 있는데,이 중 웹 폼과 관계되어사용하게 되는 폴더는 다음 그림과 같이 CSharpProjectItemsVC#Wizards 안에 들어있는 몇몇 폴더와 파일입니다.

3. 그렇다면 먼저, VC#Wizards 폴더부터 살펴보도록 하겠습니다. VC#Wizards 폴더의 안으로 들어가 보면, 수 많은 폴더들이 있는데그 중에는 CSharpAddWebFormWiz라는 폴더도 있을 것입니다. 이 폴더가 바로 기본적인 웹폼을 추가할 때 사용되는 템플릿이 들어있는폴더입니다. 해서, CSharpAddWebFormWiz 폴더 안쪽으로 보시면 다음 그림과 같이 Scripts와 Templates 폴더가 존재하는 것을 보실수 있습니다.

4. 이 중 Templates\1042에 들어가 보시면 "WebForm1.aspx"라는 파일이 존재하는 것을 보실 수 있을 것입니다. 바로, 이 파일이VS.NET에서 기본적인 웹 폼을 추가할 경우, 템플릿이 되는 파일이지요. 해서, 이 파일을 열어보시면 다음과 같이 자주 본 HTML 코드들이 들어있는 것을확인하실 수 있을 것입니다.

이 중, $FILENAME$, $INHERITS$, [!output SAFE_ITEM_NAME] 등의 지정자들은 차후 개발자들이 VS.NET에서 새로운 파일을 생성할 경우, 개발자가 지정한 파일명에 따라동적으로 바뀌게 되는 부분이니 건드리셔는 안됩니다(VS.NET이 자동으로 변경합니다).

그렇다면, 퀴즈!!! 이 파일을 약간 수정해서 텍스트를 추가하면 이후로는 VS.NET에서 새로 추가하는 웹 폼은 그렇게 추가된 텍스트를 포함한 채로 웹 폼이 생성될까요?

그렇습니다. 실제로 그렇게 됩니다. 하지만, 원본 파일을 건드리는 것은 좋은 생각이 아니죠??? 그러므로, 이 파일을 직접 건드리는 일은 가급적 하지 않는 것이 좋습니다. 도전정신이 강하신 분이라면 한번 해보셔도 좋겠습니다만, 그로 인해 일어나는 문제에 대해서는책임지지 않습니다. 하하하~~~

5. 저는 이러한 템플릿 파일을 포함하고 있는 CSharpAddWebFormWiz 라는 폴더를 그대로 복사해서, '나만의 웹폼'을 위한 구성을 따로추가해 보려 합니다. 그렇다면, 어떻게 하면 될까요? 가장 간단한 것은 CSharpAddWebFormWiz 폴더를 복사 및 붙여넣기를 하는 것이죠.동일 폴더 상에서 특정 폴더를 복사하자마자 붙여넣기를 하면 "사본 - 폴더명"과 같은 폴더가 생성되는 것을 알고 계시죠???바로 CSharpAddWebFormWiz라는 폴더에 대해서 그렇게 하셔서 "사본 - CSharpAddWebFormWiz" 폴더를 만들어 보세요. 그리고, 그 폴더의 이름을 다음 그림과같이 CSharpAddMyWebFormWiz 라고 바꾸어 놓도록 하세요 ^^

그러면, 원래의 CSharpAddWebFormWiz 폴더와 동일한 내부구조 및 파일을 갖는 CSharpAddMyWebFormWiz를 만드신 것이 됩니다.

6. CSharpAddMyWebFormWiz 폴더를 만드셨다면, 폴더 안에 있는 Templates\1042\WebForm1.aspx 라는 놈을 여러분의 프로젝트에 맞게적절히 내용을 추가하도록 하세요. 해서, 나중에 실제로 '나만의 웹폼'을 VS.NET에서 추가할 경우, 그 모습을 기반으로 웹 폼이 추가될 수 있도록 말이지요. 저의 경우는 다음과 같이, body의 Margin 값들을 0으로 설정해 보았구요. 폼 안에 기본적인 테이블 레이아웃을삽입해 보았습니다.

좋았습니다. 여기까지는 OK

7. 그 다음 건드려야 할 부분은 처음에 말씀드렸던 2개의 폴더 중 남은 부분, 즉 CSharpProjectItems라는 폴더입니다. 일단, CSharpProjectItems폴더에 가보시면, 수많은 .vsz 확장자를 갖는 파일들이 있는 것을 보실 수 있을 것입니다. 이 파일은 VS.NET이 마법사를 구동하기 위해서사용하는 파일이구요. 이 파일들이 바로 앞에서 제작한 폴더들과 연계됩니다요. 해서, vsz 파일들 중에서 CSharpAddWebFormWiz.vsz 라는 파일을 메모장으로 열어보시면 다음과 같은 내용이 있는 것을보실 수 있을 겁니다. 이 파일은 기본 웹 폼을 위해서 사용되는 파일이므로 보기만 하시고, 내용을 변경하지는 마세요!!

코드 중 Param="WIZARD_NAME = CSharpAddWebFormWiz" 라는 부분에 주목하셔야 합니다. 즉, 이 웹 폼용 vsz 파일은 VS.NET이 웹 폼을 추가하기 위해서 마법사를 실행할 경우, 아까 작업했던 VC#Wizards 폴더 안에 있는 CSharpAddWebFormWiz 폴더의 내용을이용하겠다는 것을 의미하는 것입니다.

해서, 우리도 이에 맞춰 CSharpAddMyWebFormWiz를 위한 vsz를 추가로 만들어 주어야 합니다. ^^ 이미 그렇게 해야할 것이라고추측하고 계셨죠?? 역시!!!

8. 그렇다면, CSharpProjectItems 폴더 안에서 기존 일반 웹 폼용 CSharpAddWebFormWiz.vsz 파일을 복사, 붙여넣기 하셔서 "사본 - CSharpAddWebFormWiz.vsz"을만드신 다음, 그 파일명을 기존과 마찬가지로 CSharpAddMyWebFormWiz.vsz 라고 재명명해 주시고... 다음과 같이 파일을 메모장으로 열어서 내용도 다음과 같이바꾸어 주도록 하세요 ^^

9. 이제 거의 다 되어 갑니다. 이제 눈을 CSharpProjectItems 안에 있는 .vsz 파일에서 하위 폴더로 옮겨보도록 하겠습니다. 2개의 폴더가 있죠?우리는 그 중 WebProjectItems 폴더로 들어가 보도록 하겠습니다. 그 안에는 다음 그림과 같은 폴더들이 있죠???

이 폴더들 어디서 본적 있지 않으세요??? 잘 생각해 보세요.... 도저히 생각이 안난다구요??? 음.... 그렇군요..

그렇다면, VS.NET을 열어서 C# 프로젝트로 새로운 ASP.NET 웹 어플리케이션을 하나 만들어 보세요. 그리고, 그 생성된 어플리케이션에[새 항목 추가]를 해보도록 하세요. 그러면, 다음과 같이 [새 항목 추가] 마법사가 나올텐데요. 여기서 왼쪽에 있는 [웹 프로젝트 항목]이라는 폴더를 펼쳐보세요.. 그러면, 이제는 눈치채실 겁니다.

그렇습니다. WebProjectItems 폴더의 하위 구조는 [새 항목 추가] 마법사의 좌측 폴더 구조를 나타내는 녀석입니다. 해서, WebProjectItems 폴더에다가 새로이 폴더를 추가하면,실제로 [새 항목 추가] 마법사에도 그 폴더가 나타나게 되는 것이지요.

우리는 이 중 UI라는 폴더로 한번 가 보겠습니다. 그 안에는 ui.vsdir라는파일이 있을텐데요. 그 파일을 메모장으로 열어보면, 짜잔~~ 그 안에는 [새 항목 추가] 마법사에서 UI라는 폴더를 눌렀을 경우에, 우측에나타나게될 아이템들의 목록이 기록되어져 있답니다. 다소 어지럽게 코드가 기록되어져 있긴 하지만 말이죠... ^^

그렇다면, 대충 돌아가는 내용을 파악했으니, 이제 여기(WebProjectItems 폴더에)에 우리만의 폴더를 하나 추가하도록 하겠습니다. 이름하야 "나만의 UI"!! (만일, 이 명칭이 싫으시면 여러분이 원하시는 어떠한 이름을 주어도 무방합니다.. 그러나, 그 경우 태오에게서 '췟!! 두고보자!'라는 소리를 들을런지도..)

그리고, 이 폴더 안에는 아까 UI 폴더에 있던 ui.vsdir 파일을 복사해 와서 다음과 같이단 한 줄로(원래는 여러줄이 있었지만) 편집해 보도록 하겠습니다. (원래 존재하던 첫번째 라인의 CSharpAddWebFormWiz.vsz 관련 코드를 참고해서 말이죠).주의하실 부분은 이 코드는 한 줄로 기입되어야 한다는 겁니다. 맘대로 엔터치면 절대 안됩니다.

..\..\CSharpAddMyWebFormWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|나만의 Web Form|10|나만의 웹 폼 템플릿을 프로젝트에 추가합니다|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4534|0|WebForm.aspx

원래 코드에서 CSharpAddWebFormWiz.vsz 라는 부분을 CSharpAddMyWebFormWiz.vsz로 바꾸었고, #2236 라는 부분을 "나만의 Web Form"로 바꾸었으며, #2263 이었던 부분을 "나만의 Web Form|10|나만의 웹 폼 템플릿을 프로젝트에 추가합니다"라고 변경한 것입니다. 이 부분들은 각각 마법사에서 폼 아이콘이 나타날 때의 명칭과 설명입니다. ^^ (밑의 그림에서 실제 나오는 모습을 보시면 쉽게 이해하실 겁니다)

다 되셨으면 저장하고 메모장을 닫도록 하세요 ^^.. 이제 끝났습니다!!!

축하축하!!

이제 실제로 잘 동작하는지 VS.NET을 열어서 테스트해 보아야 겠죠?? 그렇다면, 우선은 기존에 열려져 있는 모든 VS.NET 프로젝트를닫아주세요. 지금까지 설정한 사항은 기존에 열려져 있는 프로젝트에는 적용되지 않기 때문입니다.

새로이 C# 프로젝트의 ASP.NET 웹 어플리케이션을 열던가, 아님 새로 만들어 주세요. 그리고, 신나는 마음으로 다음과 같이 [새 항목 추가]를 클릭해 줘보세요.그러면, 진짜로 '나만의 웹폼'이 나오는 것을 보실 수 있고, 그것을 선택하고, 확인을 누르면...

진짜로~~~~ 우리가 작성해 놓은 템플릿대로 파일이 생성되는 것을 보실 수 있을 것입니다!! 생성된 WebForm의 HTML 코드를 한번 보세요. 우리가 템플릿 만들어 놓은대로 태그들이 들어가 있죠??? 음핫핫 !!!!!!!!!!!!!!!!!!!!!!

멋지지 않나요? 게다가, 처음 해볼때만 어렵지 몇번 해보면 이 작업이 전혀 어렵지 않다는 것도 알게되실 겁니다.^^자꾸 자꾸 해보심... 능숙해 집니다. ^^

그럼 이번 강좌를 마쳐볼까요????







"삐리리리~~ 삐리리리~~~~ 엇?? 여보세요?"

독자 : 강좌를 끝내기 전에 잠시만요~~
태오 : 엣?? 어떻게 전화를??? 누구신지....
독자 : 제가 누군진 아무도 궁금해 하지 않으니깐 넘어가구요. 질문이 있어요~
태오 : 뭔데요?
독자 : 코드 비하인드 파일은... 어떻게 템플릿을 만들어요???
태오 : ......





독자 : 설마.. 너... 모르는거냐?




태오 : ......

독자 : ...... 진짜 모르냐?

태오 : (뒤적뒤적.. 클릭클릭... 3시간 경과... 진땀뻘뻘... 앗!! 뭔가 발견... 테스트... )

그렇습니다. 왜 방법이 없겠습니까??? 원래부터 알고 있었습니다만, 가벼운 꽁트를 통해서 더욱여러분의 기대를 땡겨보았습니다. ^^코드 비하인드 파일의 경우는 위의 작업을 모두 마쳤다면 매우 간단하게 해결할 수 있습니다. ^^ 그럼 한번 해볼까요?

나만의 코드 비하인드 파일의 템플릿 적용하기

1. 우선, 제일 처음 작업했던 폴더인 VC#Wizards의 하위로 실제 템플릿 파일(WebForm1.aspx)이 있었던 CSharpAddMyWebFormWiz\Templates\1042 폴더로 갑니다거기에는 달랑 2개의 파일이 있죠? Templates.inf와 WebForm1.aspx 말입니다. 앞에서 우리는 WebForm1.aspx 파일의 내용을 변경했었잖아요? 나만의 웹폼을 위해서 말이죠~~ ^^;;

코드 비하인드 템플릿도 추가하고 싶다면, 여기에 WebForm1.aspx.cs 라는 이름으로 코드 비하인드 템플릿 파일을 만들어주시면 됩니다. 간단하죠?

그렇다면,한번 직접 해볼까요??? 우선, 폴더에 WebForm1.aspx.cs 라는 파일을 하나 생성한 다음, 다음과 같이 템플릿 코드를 넣어주세요.절대로 주의할 점은 코드 중에서 [!output SAFE_NAMESPACE_NAME]나 [!output SAFE_CLASS_NAME]와 같은 부분은 절대로 바꿔서는 안된다는 겁니다이 부분은 VS.NET이 동적으로 파일 생성 시 값을 넣는 부분이니까요 ^^

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace [!output SAFE_NAMESPACE_NAME]
{

    /// <summary>
    /// [!output SAFE_CLASS_NAME] 클래스에 대한 요약설명
    /// </summary>

    public class [!output SAFE_CLASS_NAME] : System.Web.UI.Page
    {
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!Page.IsPostBack)
            {
                // 페이지가 처음 로드되는 경우 필요한 코드를 작성하세요
            }
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>

        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
    }
}

저는 기본 코드 외에 Page_Load 이벤트 안에 IsPostBack을 체크하는 로직을 미리 넣어둬 보았습니다. 원래의 기본 웹폼 용 코드 비하인드파일에는 그러한 부분이 들어가 있지 않지만, 매우 자주 코딩하게 되는 코드인지라 '나만의 코드 비하인드'에는 이를 넣어본 것입니다.

이렇게 하면 전부냐??? 안타깝게도 그렇지는 않습니다. 간단한 2개의 작업을 더 해주셔야 합니다.

2. 우선. 동일한 폴더에 있는 Templates.inf 파일을 열어서, 다음과 같이 WebForm1.aspx.cs 라는 것을 추가해 주어야 합니다.

3. 마지막으로, CSharpAddMyWebFormWiz 폴더의 Scripts\1042로 가셔서 default.js 파일안의 코드를 다음 보여드리는 코드로 바꿔주셔야 합니다.그럼 모든 작업은 끝이 나는거죠!!! (직접 작업하시기 뭐하면, 다운로드 받은 파일의 것을 사용하셔도 됩니다)

// (c) 2001 Microsoft Corporation
function AddDefaultServerScriptToWizard(selProj)
{
   wizard.AddSymbol("DEFAULT_SERVER_SCRIPT", "JavaScript");
}

function AddDefaultClientScriptToWizard(selProj)
{
    var prjScriptLang = selProj.Properties("DefaultClientScript").Value;
    // 0 = JScript
    // 1 = VBScript
    if(prjScriptLang == 0)
    {
        wizard.AddSymbol("DEFAULT_CLIENT_SCRIPT", "JavaScript");
    }
    else
    {
        wizard.AddSymbol("DEFAULT_CLIENT_SCRIPT", "VBScript");
    }
}

function AddDefaultDefaultHTMLPageLayoutToWizard(selProj)
{
    var prjPageLayout = selProj.Properties("DefaultHTMLPageLayout").Value;
    // 0 = FlowLayout
    // 1 = GridLayout
    if(prjPageLayout == 0)
    {
        wizard.AddSymbol("DEFAULT_HTML_LAYOUT", "FlowLayout");
    }
    else
    {
        wizard.AddSymbol("DEFAULT_HTML_LAYOUT", "GridLayout");
    }
}

function OnFinish(selProj, selObj)
{
    var oldSuppressUIValue = true;
   try
   {
        oldSuppressUIValue = dte.SuppressUI;
      var strProjectName      = wizard.FindSymbol("PROJECT_NAME");
      var strSafeProjectName = CreateSafeName(strProjectName);
      wizard.AddSymbol("SAFE_PROJECT_NAME", strSafeProjectName);
      SetTargetFullPath(selObj);
      var strProjectPath      = wizard.FindSymbol("TARGET_FULLPATH");
      var strTemplatePath      = wizard.FindSymbol("TEMPLATES_PATH");

      var strTpl = "";
      var strName = "";
      var InfFile = CreateInfFile();
      
      // add the default project props for the aspx file before we
      // render it
      AddDefaultServerScriptToWizard(selProj);
      AddDefaultClientScriptToWizard(selProj);
      AddDefaultTargetSchemaToWizard(selProj);
      AddDefaultDefaultHTMLPageLayoutToWizard(selProj);
      
      // render our file
      AddFilesToProject(selObj, strProjectName, 
              strProjectPath, InfFile, true);
      
      AddReferencesForWebForm(selProj);
   }
   catch(e)
   {
      if( e.description.length > 0 )
         SetErrorInfo(e);
      return e.number;
   }
    finally
    {
         dte.SuppressUI = oldSuppressUIValue;
         if( InfFile )
         InfFile.Delete();
    }
}

//Make sure that the names of the files mentioned here 
//match with that physically present in the folder
function SetFileProperties(oFileItem, strFileName)
{
    if(strFileName == "WebForm1.aspx")
    {
        oFileItem.Properties("SubType").Value = "Form";
    }
    
    if(strFileName == "WebForm1.aspx.cs")
    {
        oFileItem.Properties("SubType").Value = "Code";
    }
}

function AddFilesToProject(oProj, strProjectName, 
     strProjectPath, InfFile, AddItemFile)
{
   try
   {
      dte.SuppressUI = false;
      var projItems;

           projItems = oProj;

      var strTemplatePath = wizard.FindSymbol("TEMPLATES_PATH");

      var strTpl = "";
      var strName = "";

      // if( Not a web project )
      if(strProjectPath.charAt(strProjectPath.length - 1) != "\\")
          strProjectPath += "\\";   

      var strTextStream = InfFile.OpenAsTextStream(1, -2);
      while (!strTextStream.AtEndOfStream)
      {
         strTpl = strTextStream.ReadLine();
         if (strTpl != "")
         {
            strName = strTpl;
            var strType = "";
            if (strName == "WebForm1.aspx")
            {
                strType = "Form";
            }
            else // this would be code-behind file
            {
                strType = "Code";
            }
            
            var strTarget = "";
            var strFile = "";
            strTarget = wizard.FindSymbol("ITEM_NAME");
            
            //if we are adding the code 
                        //behind file, we need to append 
                        //the .CS extension
            //to the name obtained from the 
                        //Add New Item dialog. this name would be
            //something like "webform2.aspx"
            if(strType == "Code")
            {
                strTarget = strTarget + ".cs";
            }

            var fso;
            fso = new 
                          ActiveXObject("Scripting.FileSystemObject");
            var TemporaryFolder = 2;
            var tfolder = fso.GetSpecialFolder(TemporaryFolder);
            var strTempFolder = 
                           fso.GetAbsolutePathName(tfolder.Path);

            var strFile = strTempFolder + "\\" + 
                          fso.GetTempName();
            //var strFile = strTempFolder + "\\" + strTarget;

            var strClassName = strTarget.split(".");
            wizard.AddSymbol("SAFE_CLASS_NAME", strClassName[0]);
                wizard.AddSymbol("SAFE_ITEM_NAME", strClassName[0]);

            var strTemplate = strTemplatePath + "\\" + strTpl;
            var bCopyOnly = false;
            var strExt = strTpl.substr(strTpl.lastIndexOf("."));
            if(strExt==".bmp" || strExt==".ico" || 
                          strExt==".gif" || strExt==".rtf" 
                          || strExt==".css")
               bCopyOnly = true;
            wizard.RenderTemplate(strTemplate, 
                          strFile, bCopyOnly, true);

            var projfile = 
                            projItems.AddFromTemplate(strFile, strTarget);
            SafeDeleteFile(fso, strFile);
            
            if(projfile)
               SetFileProperties(projfile, strName);

            if(strType == "Form")
            {
               var window = projfile.Open(vsViewKindPrimary);
               window.visible = true;
            }
            
            //when adding the webform.aspx, 
                        //the AddFromTemplate function called above
            //automatically also adds the code-behind file. 
                        //Since we want to add our file
            //we will have to delete the file that 
                        //was created by default before we 
            //create our custom code-behind file
            if(strType == "Form")
            {
                var strTargetCS = strProjectPath 
                               + strTarget + ".cs";
                SafeDeleteFile(fso, strTargetCS)
            }
         }
      }
      strTextStream.Close();
   }
   catch(e)
   {
      strTextStream.Close();
      throw e;
    }
}

다 되셨으면, 기존 VS.NET들을 닫으시고, 새롭게 VS.NET을 열어서 테스트를 해보세요.

이제는 웹폼 뿐 아니라 코드 비하인드도 여러분이 템플릿으로 만들어 놓은대로 동작하는 것을 확인하실 수 있을 것입니다.


그냥 간단하게 나만의 템플릿 적용하는 방법

위의 방법대로 따라했는데 잘 안되시거나, 따라하기가 싫어서 쉽게 할 수 있는 방법은 없나하고 고민하시는 분들을 위한 희소식!!

제가 미리 다 작성해 놓은 파일이 있습니다. 이것을 다운로드 받으셔서 다음과 같이 단순히 붙여넣기만 하면 한방에 위와 같은 결과를 보실 수 있습니다.단계는 다음과 같습니다.

1. MyWebFormTemplate.zip를 다운로드 받는다. (DOWNLOAD 받으려면 클릭하세요!!)

2. 압축을 풀고 보면 VC#이라는 폴더가 있는 것을 볼 수 있을 것이다. 그렇다면, 해당 폴더(VC# 폴더)를 일단 복사해둔다.

3. VS.NET이 설치된 폴더를 찾아간다. 기본적인 경로는 C:\Program Files\Microsoft Visual Studio .NET 2003 이다.

4. C:\Program Files\Microsoft Visual Studio .NET 2003에 다운로드 받은 VC# 폴더를 붙여넣기 한다.

5. 다음과 같이 "덮어쓰겠느냐"는 메시지가 나와도 움찔하지 말고 "모두 예"를 클릭한다.

6. VS.NET을 새로이 열고, 테스트를 해본다... 그리고, 매우 만족하는 미소를 짓는다 ^^

ps : 재미있었거나, 강좌가 만족스러우셨다면 메일이나 글 하나 남겨주세요 ^^

 

참고 문서

Using Custom Templates in VS.NET :
http://www.dotnetjunkies.com/Article/E647C643-4CBD-48E3-9727-534D08FB1CD1.dcik

Building a Custom Web Form Wizard in Visual Studio .NET :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/customwebwiz.asp


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})