티스토리 뷰

반응형

솔루션 2개를 이용해서 개발을 진행 중인데, 첫번째 솔루션은 Framework이고, 다른 솔루션은 Framework를 nuget으로 만들어서 배포하고, nuget package를 사용하는 응용 프로그램 개발 솔루션입니다. 모든 프로젝트를 nuget으로 만들면 좋겠지만, 일부만 만들고 나머지는 프로젝트로 존재합니다.

 

각 솔루션을 이용해서 개발을 진행하다 보니, Framework 솔루션과 응용 프로그램 솔루션의 소스가 서로 약간씩 달라지면서 생기는 불편한 부분이 발생해서, 해결 방법에 대해서 포스팅을 합니다.

1. WpfSamples 솔루션 추가

WpfSamples라는 이름의 솔루션을 새로 만들고, git에 등록했습니다.

이 솔루션에서 WpfTest 솔루션의 PackUriSample.Module 프로젝트를 연결합니다.

여기서 중요한 점 한가지는 가능하면 동일한 부모 폴더를 가지고 있는 것이 좋습니다.

저는 D:\Repo\ 폴더 아래 WpfTest, WpfSamples라는 폴더에 각각 솔루션이 들어있습니다.

2. 다른 레파지토리 폴더에 있는 프로젝트 추가

WpfSamples 솔루션에서 마우스 오른쪽 버튼을 클릭하고 Existing Project...를 선택합니다.

PackUriSample.Module 폴더로 이동해서 PackUriSample.Module.csproj 파일을 선택해서 프로젝트를 추가합니다.

여기까지 진행하고 Git Changes 탭으로 이동하면 아래와 같이 변경되는 것을 볼 수 있습니다.

3. WpfSample 프로젝트 수정

참조 추가를 선택해서 PackUriSample.Module 프로젝트를 선택합니다.

모듈을 사용하기 위해서는 아래와 같이 moduleCatalog에 추가해야 합니다.

여기서 사용하는 프로젝트는 모두 Prism 라이브러리를 사용하는 것을 기본으로 하고 있지만, 다중 레파지토리를 이용하는 방법은 Prism 라이브러리와는 관련이 없습니다.

App.xaml.cs

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App
{
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {

    }
    /// <summary>
    /// PackUriSample.Module 추가
    /// </summary>
    /// <param name="moduleCatalog"></param>
    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
        _ = moduleCatalog.AddModule<PackUriSampleModule>();
    }
}

View와 ViewModel을 수정합니다. 수정한 코드는 소스를 참고하세요.

4. PackUriSample.Module 수정

IceCreamView.xaml에 Title을 출력할 수 있는 TextBlock를 하나 추가했습니다.

IceCreamViewModel.cs에 Title 프로퍼티를 추가하고, 아래와 같은 값을 입력합니다.

Title = Application.Current.MainWindow.Title;

5. 실행

IceCream 메뉴를 클릭하면 화면에 IceCream 이미지가 출력됩니다.

비교를 위해서 WpfTest 솔루션을 열고 PackUriSample 프로젝트를 시작 프로젝트로 지정하고 실행하면 아래와 같은 모습을 볼 수 있습니다.

 

동일한 수정 사항이 반영된 것을 알 수 있습니다.

6. 레파지토리 push

Git Changes 탭을 확인하면 아래와 같습니다.

2개의 레파지토리에 수정된 내용들이 한번에 리스트업 됩니다.

Commit All Repos를 선택한 후 Push 버튼을 누르면 아래와 같이 출력됩니다.

Push 2 branches를 눌러서 변경된 내용을 master 브랜치에 업데이트 합니다.

주의!! 일반적으로는 새로운 브랜치를 만들고, push를 한 후에 pull request를 만들고, merge 과정을 진행해야 합니다. 여기서는 핵심 내용만 설명하기 위해서 몇가지 과정을 생략했습니다.

7. 소스

1개의 솔루션에서 2개의 레파지토리를 동시에 관리하는 방법을 알아 보았습니다. 쓰고보니 특별한 것이 없네요~

https://github.com/kaki104/WpfSamples

 

반응형
댓글