Microsoft MVP성태의 닷넷 이야기
VS.NET IDE: 44. Orcas와 VS.NET 2005의 혼합 개발 [링크 복사], [링크+제목 복사],
조회: 22458
글쓴 사람
정성태 (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

... 61  62  63  64  65  66  67  68  69  70  [71]  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12162정성태2/26/202021857디버깅 기술: 166. C#에서 만든 COM 객체를 C/C++로 P/Invoke Interop 시 메모리 누수(Memory Leak) 발생 [6]파일 다운로드2
12161정성태2/26/202017911오류 유형: 597. manifest - The value "x64" of attribute "processorArchitecture" in element "assemblyIdentity" is invalid.
12160정성태2/26/202018257개발 환경 구성: 469. Reg-free COM 개체 사용을 위한 manifest 파일 생성 도구 - COMRegFreeManifest
12159정성태2/26/202015360오류 유형: 596. Visual Studio - The project needs to include ATL support
12158정성태2/25/202017947디버깅 기술: 165. C# - Marshal.GetIUnknownForObject/GetIDispatchForObject 사용 시 메모리 누수(Memory Leak) 발생파일 다운로드1
12157정성태2/25/202017980디버깅 기술: 164. C# - Marshal.GetNativeVariantForObject 사용 시 메모리 누수(Memory Leak) 발생 및 해결 방법파일 다운로드1
12156정성태2/25/202016558오류 유형: 595. LINK : warning LNK4098: defaultlib 'nafxcw.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
12155정성태2/25/202016013오류 유형: 594. Warning NU1701 - This package may not be fully compatible with your project
12154정성태2/25/202015393오류 유형: 593. warning LNK4070: /OUT:... directive in .EXP differs from output filename
12153정성태2/23/202019515.NET Framework: 898. Trampoline을 이용한 후킹의 한계파일 다운로드1
12152정성태2/23/202018571.NET Framework: 897. 실행 시에 메서드 가로채기 - CLR Injection: Runtime Method Replacer 개선 - 세 번째 이야기(Trampoline 후킹)파일 다운로드1
12151정성태2/22/202019362.NET Framework: 896. C# - Win32 API를 Trampoline 기법을 이용해 C# 메서드로 가로채는 방법 - 두 번째 이야기 (원본 함수 호출)파일 다운로드1
12150정성태2/21/202019616.NET Framework: 895. C# - Win32 API를 Trampoline 기법을 이용해 C# 메서드로 가로채는 방법 [1]파일 다운로드1
12149정성태2/20/202018418.NET Framework: 894. eBEST C# XingAPI 래퍼 - 연속 조회 처리 방법 [1]
12148정성태2/19/202020948디버깅 기술: 163. x64 환경에서 구현하는 다양한 Trampoline 기법 [1]
12147정성태2/19/202018624디버깅 기술: 162. x86/x64의 기계어 코드 최대 길이
12146정성태2/18/202019374.NET Framework: 893. eBEST C# XingAPI 래퍼 - 로그인 처리파일 다운로드1
12145정성태2/18/202019235.NET Framework: 892. eBEST C# XingAPI 래퍼 - Sqlite 지원 추가파일 다운로드1
12144정성태2/13/202019435.NET Framework: 891. 실행 시에 메서드 가로채기 - CLR Injection: Runtime Method Replacer 개선 - 두 번째 이야기파일 다운로드1
12143정성태2/13/202015995.NET Framework: 890. 상황별 GetFunctionPointer 반환값 정리 - x64파일 다운로드1
12142정성태2/12/202018360.NET Framework: 889. C# 코드로 접근하는 MethodDesc, MethodTable파일 다운로드1
12141정성태2/10/202017384.NET Framework: 888. C# - ASP.NET Core 웹 응용 프로그램의 출력 가로채기 [2]파일 다운로드1
12140정성태2/10/202017937.NET Framework: 887. C# - ASP.NET 웹 응용 프로그램의 출력 가로채기파일 다운로드1
12139정성태2/9/202019191.NET Framework: 886. C# - Console 응용 프로그램에서 UI 스레드 구현 방법
12138정성태2/9/202023220.NET Framework: 885. C# - 닷넷 응용 프로그램에서 SQLite 사용 [6]파일 다운로드1
12137정성태2/9/202016439오류 유형: 592. [AhnLab] 경고 - 디버거 실행을 탐지했습니다.
... 61  62  63  64  65  66  67  68  69  70  [71]  72  73  74  75  ...