Skip to content

Instantly share code, notes, and snippets.

@haruair
Last active June 23, 2016 01:03
Show Gist options
  • Save haruair/310349a9e1e9f59a10a8c7b190f3f246 to your computer and use it in GitHub Desktop.
Save haruair/310349a9e1e9f59a10a8c7b190f3f246 to your computer and use it in GitHub Desktop.
C# 초보가 C# 패키지를 만드는 방법

C# 초보가 C# 패키지를 만드는 방법

이상한모임 / Kobe Creations

김용균

프롤로그

C# 배우고 싶지만 쉽게 배울 수 없던 너란 언어

위대하신 저스틴님의 말씀

"걍 아무거나 만들어봐요. 그래야 늠 ㅇㅇ"

무릎을 탁!

그래서 뭐든 만들어보기로 했습니다.

뭐 만들었니

using System;
using Haruair.Command;

[Command("feed", "f")]
[Usage("Feeding related commands.")]
public class FeedCommand
{
    [Command("me", "m")]
    [Usage("Feeding yourself.")]
    public void FeedMe()
    {
        Console.WriteLine("I'm already full.");
    }
    [Command("monkey")]
    [Usage("Feeding the monkey.")]
    [Parameter("food", Required = false)]
    public void FeedMonkey(string food)
    {
        Console.WriteLine("You gave {0} to the monkey.", food ?? "banana");
    }
}

class ZooApp
{
    public static void Main(string[] args)
    {
        var commander = new Commander();
        commander.Add<FeedCommand>();
        commander.Parse(args);
    }
}

목표

터미널 많이 사용하니까 명령행 관련 라이브러리를 만들어보자.

최대한 모르는 기능을 많이 사용해보기.

테스트 + github + CI(Appveyor) + nuget 패키지 배포.

C# 환경 구축

300불 짜리 저렴저렴 노트북

  • 그래도 HDMI가 있어서 발표가 가능 ;ㅅ;
  • 똥컴, 윈도 너무 느림 (셀러론, 2기가 램)
  • 윈도 밀고 리눅스 환경 (lubuntu 15.10) 설치

닷넷 코어? 그냥 모노?

코어는 아직도 격변중. 프로젝트 구조만 달라질 뿐, C# 배우기가 목적이고 뭐든 C#이므로 모노로 선택.

C#은 역시 IDE

Vim을 좋아하지만 Vim에서 사용할 수 있는 Omni-sharp가 VS Code 출시 이후로 지지부진.

Xamarin은 리눅스 디스트로 미지원.

Xamarin의 부모님인 MonoDevelop 사용하기로. 무료!

코딩, 막혔던 부분

C# 잘 몰라서 막 작성.

  • MDD (MSDN Driven Development)
  • SODD (Stackoverflow Driven Development)

리플렉션 The Love.

  • Type, MethodInfo, CustomAttributes, Etc.

MonoDevelop이 NUnit과 궁합이 좋다고 해서 NUnit 사용.

  • 단위테스트 느낌보다는 좀 BDD 느낌에 가깝게 작성함.
  • Console.Out으로 입력과 예상 출력을 비교하는 방식.
  • 몇 기본 클래스는 별개로 테스트.

코드 및 이슈 관리

깃헙에 그냥 넣었습니다.

이슈 트래커 - 깃헙 리포지터리 - 깃헙

깃헙 짱짱맨.

nuget 배포

로컬에서 배포하려고 했는데 로컬 의존성 문제로 뭔가 잘 안됨.

System.NotImplementedException: The method or operation is not implemented.

흔문제 in Linux, Mac

  • MSBuild, XBuild, 어쩌고 저쩌고. 해결 방법도 복잡하고 까다로움.
  • AppVeyor를 통해서 빌드/배포하기로.

Appveyor 설정

설정 파일 하나면 테스트도 돌려주고 빌드도 해줌

https://github.com/haruair/csharp-command/blob/master/appveyor.yml

https://ci.appveyor.com/project/haruair/csharp-command/branch/master

브랜치도 나눌 수 있고, 버전도 지정 가능하고, nuspec에 인자도 전달해서 버전도 자동으로 올릴 수 있음.

nuget 가입하고 api키 발급한 것 넣음. appveyor에서 암호화.

Nuget 패키지

그래서 이렇게 패키지가 업로드 됩니다.

https://www.nuget.org/packages/Haruair.Command/

이제 누구든지 사용할 수 있는 패키지가 되었습니다.

다음 개발 목표

  • Option (--something) 지원
  • 파라미터 타입 캐스팅
  • autofac 같은 IoC 사용할 수 있도록
  • mock 써서 테스트 작성
  • 그 외 이것 저것...

발표 끝

발표는 여기까지. 궁금한 내용 있으면 질문해주세요.

@ujuc
Copy link

ujuc commented Jun 22, 2016

음.... 가위손용 커멘드를 만들어볼까용...? 가위손은 언제쯤 되지 그런데.;;;

@haruair
Copy link
Author

haruair commented Jun 23, 2016

@ujuc 가위손 cli도 이미 만드셨던거 같은데... 아마 닷넷코어 좀 정리되면 다시 시작하실 것 같아요. @justinyoo 그렇죠?ㅋ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment