본문 바로가기

Visual Studio

VisualStudio 2008에서 CopySourceAsHtml 사용하기

Visual Studio의 재시작시에 CopySourceAsHtml에서 오류가 발생하는 문제의 해결방법을 첨부합니다. (2007.10.18)

블로그나 게시판등에 Visual Studio에서 개발하던 소스를 추가하기 위해서 복사&붙여넣기를 하면 탭간격이나 글꼴등의 문제로 인해서 직접 다듬어야 하는 경우가 자주 발생합니다.
개발자라면 누구나 느끼는 문제일텐데요.

Visual Studio를 이용하고 계시는 분이라면 이러한 불편함을 말끔하게 해소해 주는 Visual Studio Addin을 유경상님께서 블로그에 소개시켜주시고 있습니다.

CopySourceAsHtml 이라는 Addin인데요. 원본파일은 한글문제와 여러가지 문제가 존재하여 감사하게도 유경상님께서 따로 한글환경에서도 문제없이 돌아가는 버전까지 공개해주시고 계시죠.

좀더 자세한 내용을 알고 싶으시거나 자료를 다운로드 받고자 하시는 분은 유경상님 블로그로 방문해보세요.

(저 같은 경우에는 유경상님 블로그에서 받은 파일로 Visual Studio 2008에 등록시에 최초에는 잘 실행이 되었지만, 재 시작시에 CopySourceAsHtml에서 오류가 발생하였습니다. 이 부분의 수정과 적용에 관해서는 글 하단에서 다루도록 하겠습니다. 2007.10.18)

문제는 이 CopySourceAsHtml이 Visual Studio 2005용 Addin이라는 거죠. 물론 원본 배포사이트에는 2003버전용도 존재합니다만, 아직 Visual Studio 2008용은 배포를 하고 있지 않죠.

Visual Studio 2008이 아직 beta이긴 하지만, 이전 .NET Framework버전에 대한 프로그래밍이 가능하므로 많은 분이 사용하고 계실텐데요. 2005용 Addin을 Addins폴더로 복사만 해넣어서는 제대로 동작하질 않죠. 하지만 유용하게 하던 기능이 없으면 엄청 불편하죠..^^;

이리 저리 궁리하던차에 CopySourceAsHtml을 Visual Studio 2008에 등록시키는데 성공하여 공유차원에서 포스팅을 합니다.

  1. 우선 CopySourceAsHtml을 이용하고 계시다면 %문서%\Visual Studio 2005\Addins\ 폴더에 존재하는 CopySourceAsHtml.AddIn, CopySourceAsHtml.dll, CopySourceAsHtml.dll.config 3개 파일을 %문서%\Visual Studio 2008\Addins\ 또는 %문서%\Visual Studio Codename Orcas\Addins\ 폴더로 복사해 줍니다.(Addins 폴더가 존재하지 않는다면 만들어주면 됩니다.)
  2. 복사 되었으면 CopySourceAsHtml.AddIn 파일을 편집기로 엽니다. XML형식이므로 원하는 텍스트 편집기를 이용하시면 됩니다.
    열어보시면 <HostApplication> 이라는 태그 하위태그로 <Version>이라는 태그들의 내용을 8.0 에서 9.0으로 변경해주세요.

    <?xml version="1.0" encoding="UTF-16" standalone="no"?>

    <Extensibility xmlns="http://schemas.microsoft.com/AutomationExtensibility">

        <HostApplication>

            <Name>Microsoft Visual Studio Macros</Name>

            <Version>9.0</Version>

        </HostApplication>

        <HostApplication>

            <Name>Microsoft Visual Studio</Name>

            <Version>9.0</Version>

        </HostApplication>

        <Addin>

            <FriendlyName>CopySourceAsHtml</FriendlyName>

            <Description>Adds support to Microsoft Visual Studio 2005 for copying source code, syntax highlighting, and line numbers as HTML. (Modified by Loner, SimpleIsBest.NET)</Description>

            <Assembly>CopySourceAsHtml.dll</Assembly>

            <FullClassName>JTLeigh.Tools.CopySourceAsHtml.Connect</FullClassName>

            <LoadBehavior>1</LoadBehavior>

            <CommandPreload>0</CommandPreload>

            <CommandLineSafe>0</CommandLineSafe>

        </Addin>

    </Extensibility>

  3. 저장하신후 Visual Studio 2008을 실행하시고, Tools - Add-in Manager(도구 - 추가기능관리자)를 실행하고 활성화 시켜 줍니다.
     
  4. 이제 Visual Studio 2008에서도 CopySourceAsHtml을 사용하실 수 있습니다.

 

VisualStudio 시작시 오류해결방법 (2007.10.18 추가)

한번 Visual Studio를 실행하면 퇴근할때까지는 잘 종료를 안하다 보니 오늘에서야 Visual Studio를 재시작시에 CopySourceAsHtml 에서 오류가 발생한다는 것을 알게되었습니다.
확실히 점검하지 않고 글을 등록한점 정말 죄송합니다. ( _ _ )
저는 Vista환경에 Visual Studio 2008은 beta2 영문판이 설치되어 있으며, Visual Studio 2005는 한글판이 설치되어 있는데, 2005, 2008 모두에서 문제가 발생하더군요.
또한 프로젝트 속성 클릭시에서 오류가 발생하고 있었습니다.

우선 발생하는 문제들을 해결하는 방법은 유경상님의 포스트 하단 댓글로 작성된 "하늘로사랑한신발" 박길선님의 홈페이지 잘 소개되어 있습니다. (박길선님께 감사드립니다)

우선 원본 배포사이트에서 "CopySourceAsHtml 2.0.0 Source (91 KB)" 를 다운로드 받습니다.

박길선님 홈페이지로 들어가셔서 "Copy Source As Html" rev 0.2 게시물에 적혀 있는데로 코드를 수정합니다.

그런데, 박길선님 홈페이지 등록된 수정방법대로 수정후에 반영시키면 한글을 제대로 인식하지 못하는 문제가 발생합니다. 유경상님 소스를 역컴파일하여 수정하시어 소스는 역시 공개하지 않으셨네요. 하지만 문제만 해결한다고 해서 한글이 지원되지 않으면 아무런 필요가 없죠.. -_-;

한글 문제를 해결하기 위해서는 RtfParser.cs를 추가로 아래와 같이 수정하셔야 합니다.
우선은 아래와 같이 수정하시면 한글을 지원합니다. 유경상님 님께서 동일하게 수정하셨는지는 몰라도 역컴파일하지 않았으니 상관없겠죠? 66 - 69 라인을 추가해주시면 됩니다.

RtfParser.cs

   25 protected void ParseRtf(string rtf)

   26 {

   27 

   28     int first;

   29     int last;

   30     int index;

   31     int mark;

   32     string controlWord;

   33     bool hasParameter;

   34     long parameter;

   35 

   36     first = 1;

   37     last = rtf.Length - 1;

   38     for (index = first; index < last; index++)

   39     {

   40 

   41         switch (rtf[index])

   42         {

   43             case '{':

   44                 index += ParseOpeningBrace(rtf, index + 1);

   45                 break;

   46             case '}':

   47                 index += ParseClosingBrace(rtf, index + 1);

   48                 break;

   49             case '\\':

   50                 index++;

   51                 if (char.IsLetter(rtf[index]))

   52                 {

   53                     mark = index;

   54                     while ((index < last) && (char.IsLetter(rtf[index])))

   55                     {

   56                         index++;

   57                     }

   58                     controlWord = rtf.Substring(mark, index - mark);

   59                     if ((index < last) && ((char.IsDigit(rtf[index])) || (rtf[index] == '-')))

   60                     {

   61                         mark = index;

   62                         while ((index < last) && ((char.IsDigit(rtf[index])) || (rtf[index] == '-')))

   63                         {

   64                             index++;

   65 

  66                             if (controlWord.Equals("uc"))

   67                             {

   68                                 break;

   69                             }

   70                         }

   71                         hasParameter = true;

   72                         parameter = Int64.Parse(rtf.Substring(mark, index - mark));

   73                     }

   74                     else

   75                     {

   76                         hasParameter = false;

   77                         parameter = 0;

   78                     }

   79                     if (rtf[index] != ' ')

   80                     {

   81                         index--;

   82                     }

   83                     index += ParseControlWord(rtf, index + 1, controlWord, hasParameter, parameter);

   84                 }

   85                 else

   86                 {

   87                     index += ParseControlSymbol(rtf, index + 1, rtf[index]);

   88                 }

   89                 break;

   90             case '\r':

   91             case '\n':

   92                 break;

   93             default:

   94                 index += ParseLiteralText(rtf, index + 1, rtf[index]);

   95                 break;

   96         }

   97     }

   98 }

수정완료후 Build 하시고 CopySourceAsHtml.dll 파일과 CopySourceAsHtml.pdb 파일을 AddIns폴더로 덮어써주시면 문제가 해결이 되며, 한글도 제대로 출력됩니다.

혹시 문제가 발생하신다면 댓글로 남겨주세요..

'Visual Studio' 카테고리의 다른 글

Visual Studio 2010 Beta 2 에서 Code Coverage 사용하기  (0) 2010.01.07