Microsoft MVP성태의 닷넷 이야기
VS.NET IDE: 44. Orcas와 VS.NET 2005의 혼합 개발 [링크 복사], [링크+제목 복사],
조회: 22401
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)

Orcas와 VS.NET 2005의 혼합 개발


Orcas의 특징 중 하나가, 바로 대상이 되는 ".NET Framework"의 버전을 지정할 수 있다는 것입니다. 반가운 소식이죠? ^^

그런데, 현재 팀 개발을 하고 있는 경우라면 어떨까요?

다른 팀원들은 VS.NET 2005를 사용하는데, 자신만 Orcas로 업그레이드 하는 것이 가능할까요? 사실, 최근의 개발 환경에서 Visual SourceSafe 또는 TFS Version Control(또는 그 외의 3rd-party 형상관리 시스템)을 사용하는 것이 보통인데... 실제 프로젝트 중에 개인의 관심사를 이유로 Orcas로 업데이트 한다면??? 물론, 모든 팀원이 다 같이 업데이트한다면 문제 없겠지만, 그렇지 않은 경우가 더 많을 것입니다. 사실, 이 때문에 새로운 개발 환경을 포기하고 어쩔 수 없이 VS.NET 2005를 써야만 하지요.

그런데... 가만 생각해 보면, 왠지 가능할 것도 같습니다. .NET 2.0/3.0는 VS.NET 2005에서 동일하게 개발이 가능하고, 3.5의 경우에는 컴파일러와 부가적인 어셈블리가 추가된 정도입니다. 또한 프로젝트 파일이 XML 형식의 MSBuild 파일이기 때문에 왠지 개발 툴에 의존적일 것 같진 않습니다.

어디... 정말 되는지 한번 볼까요? ^^




예제를 간단히 하기 위해, 여기서는 Visual SourceSafe를 대상으로 Console Application 유형으로 테스트해 보겠습니다.

그렇다면 우선 할 일은, Visual SourceSafe에 VS.NET 2005를 이용해서 솔루션과 예제 프로젝트를 만들어서 올려 놓아야 겠습니다. 저 같은 경우에는 다음과 같이 올려 두었습니다.

vs_net2005_orcas_mixed_solution_1.png

그러니까, VSNet2005.sln 파일과 그 이하 ConsoleApplication1 프로젝트는 VS.NET 2005로 만들어진 것입니다.

자,,, 그럼 이 프로젝트를 저는 Orcas로 열고 싶고, 그러면서도 다른 사람들이 VS.NET 2005로 작업하는 데에는 지장을 주고 싶지 않은 상황임을 상기해서.

절대로, VSNet2005.sln 파일을 직접 Orcas로 열어서는 안됩니다. (사실, 나중에 보시면 알겠지만 설령 실수로 열었다고 해도 쉽게 VS.NET 2005용으로 변환할 수 있습니다.) 대신에 새로운 솔루션 파일을 Orcas에서 생성해서, 기존 프로젝트를 새로 구성해 주면 됩니다. 하지만, 해당 솔루션에 기존 프로젝트들이 간단하게 하나만 있는 경우는 드물고 여러 솔루션 폴더 및 프로젝트들이 있으므로 그런 것들을 직접 구성해 주는 것은 다소 귀찮은 작업이므로 간단하게 해결할 수 있는 방법을 찾아보았습니다.

방법은,,, 간단하죠. 기존 솔루션 파일을 복사한 후 새로운 Orcas 버전에 맞는 솔루션으로 수정만 해주면 됩니다.

그러니, 위의 "VSNet2005.sln" 파일을 복사해서 별도로 "VSNet2007.sln" 파일명으로 만들어 둡니다. 이제 VSNet2007.sln 파일을 메모장 등을 이용해서 열면 다음과 같은 파일 내용을 볼 수 있습니다.

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication1", "ConsoleApplication1\ConsoleApplication1.csproj", "{CED25172-E1A7-43DD-A718-22F14B714CED}"
EndProject
Global
  GlobalSection(SourceCodeControl) = preSolution
    SccNumberOfProjects = 2
    SccLocalPath0 = .
    SccProjectUniqueName1 = ConsoleApplication1\\ConsoleApplication1.csproj
    SccLocalPath1 = .
    SccProjectFilePathRelativizedFromConnection1 = ConsoleApplication1\\
  EndGlobalSection
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
    Debug|Any CPU = Debug|Any CPU
    Release|Any CPU = Release|Any CPU
  EndGlobalSection
  GlobalSection(ProjectConfigurationPlatforms) = postSolution
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Debug|Any CPU.Build.0 = Debug|Any CPU
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Release|Any CPU.ActiveCfg = Release|Any CPU
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Release|Any CPU.Build.0 = Release|Any CPU
  EndGlobalSection
  GlobalSection(SolutionProperties) = preSolution
    HideSolutionNode = FALSE
  EndGlobalSection
EndGlobal

수정할 부분은 간단합니다. 버전 기록 부분과 소스 세이프에 연결되었다는 값들을 제거해 주면 됩니다. 위에서 "굵은 글씨"로 되어 있는 부분들을 삭제/변경해서 다음과 같은 파일 내용으로 만들어 줍니다.

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication1", "ConsoleApplication1\ConsoleApplication1.csproj", "{CED25172-E1A7-43DD-A718-22F14B714CED}"
EndProject
Global
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
    Debug|Any CPU = Debug|Any CPU
    Release|Any CPU = Release|Any CPU
  EndGlobalSection
  GlobalSection(ProjectConfigurationPlatforms) = postSolution
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Debug|Any CPU.Build.0 = Debug|Any CPU
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Release|Any CPU.ActiveCfg = Release|Any CPU
    {CED25172-E1A7-43DD-A718-22F14B714CED}.Release|Any CPU.Build.0 = Release|Any CPU
  EndGlobalSection
  GlobalSection(SolutionProperties) = preSolution
    HideSolutionNode = FALSE
  EndGlobalSection
EndGlobal

자, 이제 이 솔루션을 Orcas에서 열면, 솔루션 내에 포함된 프로젝트들을(예제에서는 ConsoleApplication1.csproj) 대상으로 새로운 Orcas 버전으로 변환이 이뤄집니다. 걱정하지 마시고, 변환하십시오. (중간에 경고가 떨어지긴 하지만 무시하십시오.)

그렇게 되면 Orcas에서의 솔루션 탐색기에서는 다음과 같은 내용을 볼 수 있습니다.

vs_net2005_orcas_mixed_solution_2.png

일단 솔루션 파일은 임의로 생성한 것이므로 "자물쇠" 아이콘이 안 보이는 것은 당연하고, ConsoleApplication1 프로젝트의 경우에도 기존 파일 내용이 Orcas용으로 바뀌었기 때문에 강제로 체크아웃되어진 상태입니다.

어떤 부분이 바뀌었을까요? MSBuild의 구조상, 확장이 용이하기 때문에 다음과 같은 내용이 바뀌었음에도 불구하고 여전히 해당 MSBuild 프로젝트 파일, 즉 ConsoleApplication1.csproj 파일은 VS.NET 2005에서도 열릴 수 있고, Orcas에서도 열릴 수 있습니다.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
==> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
      ToolsVersion="3.5">

물론, Orcas에서만 설정이 가능한 프로젝트 설정이 있다 해도, <PropertyGroup /> 태그의 별도 자식 태그로만 존재할 뿐이기 때문에 VS.NET 2005에서는 해당 값을 무시함으로 인해 아무런 문제도 발생하지 않게 됩니다.

자... 그럼, 이제 마무리를 해줘야죠. 다음 화면에서 보는 것처럼, Solution 노드를 오른쪽 마우스 버튼으로 클릭해서 새롭게 구성된 솔루션 파일도 마저 Visual SourceSafe에 추가시켜 둡니다.

[그림: 소스 세이프에 추가]
vs_net2005_orcas_mixed_solution_3.png

기왕이면, 이때 경로 설정을 다음 화면과 같이 기존 솔루션이 담겨져 있는 소스세이프 경로와 동일하게 맞춰주면 더 좋겠지요.

[그림: 소스 세이프 경로 설정]

vs_net2005_orcas_mixed_solution_4.png

최종적으로 소스 세이프에는 다음과 같이 2개의 솔루션 파일이 존재하게 됩니다.

vs_net2005_orcas_mixed_solution_5.png

자... 이제 모두 끝났습니다. 다른 팀원들은 여전히 VSNet2005.sln 파일을 이용해서 VS.NET 2005로 작업을 할 수 있고, Orcas를 설치한 팀원들은 새롭게 VSNet2007.sln 파일을 이용해서 프로젝트를 계속 진행할 수 있습니다.






[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/22/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2007-11-07 06시13분
kevin25

... 46  47  48  49  [50]  51  52  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12690정성태6/28/202116751Java: 23. Azure - 자바(Java)로 만드는 Web App Service - Tomcat 호스팅
12689정성태6/25/202118429오류 유형: 730. Windows Forms 디자이너 - The class Form1 can be designed, but is not the first class in the file. [1]
12688정성태6/24/202117752.NET Framework: 1073. C# - JSON 역/직렬화 시 리플렉션 손실을 없애는 JsonSrcGen [2]파일 다운로드1
12687정성태6/22/202115085오류 유형: 729. Invalid data: Invalid artifact, java se app service only supports .jar artifact
12686정성태6/21/202117095Java: 22. Azure - 자바(Java)로 만드는 Web App Service - Java SE (Embedded Web Server) 호스팅
12685정성태6/21/202118324Java: 21. Azure Web App Service에 배포된 Java 프로세스의 메모리 및 힙(Heap) 덤프 뜨는 방법
12684정성태6/19/202116666오류 유형: 728. Visual Studio 2022부터 DTE.get_Properties 속성 접근 시 System.MissingMethodException 예외 발생
12683정성태6/18/202117944VS.NET IDE: 166. Visual Studio 2022 - Windows Forms 프로젝트의 x86 DLL 컨트롤이 Designer에서 오류가 발생하는 문제 [1]파일 다운로드1
12682정성태6/18/202114489VS.NET IDE: 165. Visual Studio 2022를 위한 Extension 마이그레이션
12681정성태6/18/202114789오류 유형: 727. .NET 2.0 ~ 3.5 + x64 환경에서 System.EnterpriseServices 참조 시 CS8012 경고
12680정성태6/18/202116865오류 유형: 726. python2.7.exe 실행 시 0xc000007b 오류
12679정성태6/18/202116936COM 개체 관련: 23. CoInitializeSecurity의 전역 설정을 재정의하는 CoSetProxyBlanket 함수 사용법파일 다운로드1
12678정성태6/17/202115436.NET Framework: 1072. C# - CoCreateInstance 관련 Inteop 오류 정리파일 다운로드1
12677정성태6/17/202118275VC++: 144. 역공학을 통한 lxssmanager.dll의 ILxssSession 사용법 분석파일 다운로드1
12676정성태6/16/202117417VC++: 143. ionescu007/lxss github repo에 공개된 lxssmanager.dll의 CLSID_LxssUserSession/IID_ILxssSession 사용법파일 다운로드1
12675정성태6/16/202115350Java: 20. maven package 명령어 결과물로 (war가 아닌) jar 생성 방법
12674정성태6/15/202116528VC++: 142. DEFINE_GUID 사용법
12673정성태6/15/202117159Java: 19. IntelliJ - 자바(Java)로 만드는 Web App을 Tomcat에서 실행하는 방법
12672정성태6/15/202118845오류 유형: 725. IntelliJ에서 Java webapp 실행 시 "Address localhost:1099 is already in use" 오류
12671정성태6/15/202127558오류 유형: 724. Tomcat 실행 시 Failed to initialize connector [Connector[HTTP/1.1-8080]] 오류
12670정성태6/13/202117485.NET Framework: 1071. DLL Surrogate를 이용한 Out-of-process COM 개체에서의 CoInitializeSecurity 문제파일 다운로드1
12669정성태6/11/202117600.NET Framework: 1070. 사용자 정의 GetHashCode 메서드 구현은 C# 9.0의 record 또는 리팩터링에 맡기세요.
12668정성태6/11/202120110.NET Framework: 1069. C# - DLL Surrogate를 이용한 Out-of-process COM 개체 제작파일 다운로드2
12667정성태6/10/202117992.NET Framework: 1068. COM+ 서버 응용 프로그램을 이용해 CoInitializeSecurity 제약 해결파일 다운로드1
12666정성태6/10/202115586.NET Framework: 1067. 별도 DLL에 포함된 타입을 STAThread Main 메서드에서 사용하는 경우 CoInitializeSecurity 자동 호출파일 다운로드1
12665정성태6/9/202117644.NET Framework: 1066. Wslhub.Sdk 사용으로 알아보는 CoInitializeSecurity 사용 제약파일 다운로드1
... 46  47  48  49  [50]  51  52  53  54  55  56  57  58  59  60  ...