.. _netframework_basic: ================ .NET Framework ================ App.config ========== - Framework 버전 메모리 구조 =========== - Kernel - Shared object - Application Application의 메모리 구조 - Stack(Data Segment) - Heap - Static Data Area - Code (Code Segment) Heap은 CLR에서 제거한다. 로깅, 추적 및 성능 진단 ======================= - 윈도우 이벤트 로그 (관리도구 - 이벤트 뷰어 - Windows 로그 - 응용프로그램) - Debug.Assert를 활용한 디버그 (VS의 Debug 모드에서 사용가능) - Debug.WriteLine를 활용한 추적 (VS의 Debug 모드) - Trace.WriteLine를 활용한 추적 (VS의 Debug, Release 모드) - Visual Studio의 [분석 - 성능 및 진단]을 사용해서 성능 분석 - `PerformanceCounter `_ 객체와 성능 모니터를 활용한 성능 분석 (관리도구 - 성능 및 모니터) IL 디스어셈블러 =============== ildasm을 통해 타입정보 및 참조정보를 확인할 수 있다. [VS2013용 개발자 명령 프롬프트] - ildasm 실행 [ctrl + M]을 통해 *타입 정보를* 확인할 수 있다. 단위 테스트 =========== 1) 테스트 프로젝트를 추가해야한다. - [솔루션] -> [추가] -> 테스트 프로젝트 추가 2) 다른 프로젝트를 테스트하기 위해서 참조를 추가를 해야한다. - [참조 추가] -> [솔루션] -> [프로젝트] -> 프로젝트 선택 3) 테스트 실행 - [테스트] -> [실행] -> 테스트 선택 DLL ========== 종류 - Assembly(.NET DLL, 클래스 라이브러리, 참조 추가로 사용, ILDASM으로 확인) - Unmanaged DLL(Win32 API) - Unmanaged DLL(COM Component, [DllImport]로 사용, regsvr32 zip.dll로 등록되는지 체크) [참조 추가] - [COM] - [형식 라이브러리] - 등록된 DLL을 찾는다. 어셈블리(Assembly) ------------------ 실행 프로그램 또는 DLL 또는 많은 PE파일과 리소스의 단위이다. 구성 - Manifest - MSIL - Resource - Type metadata 종류 - **Private Assembly.** 참조 추가한 프로그램만 사용 가능 - **Shares Assembly.** 여러 프로그램에서 사용 가능한 어셈블리이며 GAC에 등록해서 사용할 수 있다. 강력한 이름(Strong name)을 갖는다. **클래스 라이브러리 프로젝트를 만들어서** DLL을 만들 수 있다. 프로젝트에서 참조할 DLL 경우 - 기본적으로 시작 프로젝트에서 빌드할때 참조하는 DLL을 복사해온다. - app.config에 특정 하위폴더에서 찾도록 할 수 있다. - 강력한 이름(Strong name) 만드는 방법 - [프로젝트 속성] - [서명] - [강력한 이름 키 파일 선텍] - [빌드] GAC (Global Assembly Cache) --------------------------- 명령 :: [Visual2013용 개발자 명령 프롬프트] 실행 gacutil -i [DLL Path] gacutil -l [DLL Path] COM Component ------------- COM Component는 레지스트리에 HKEY_CLASSES_ROOT - [프로그램ID] - [클래스 아이디]로 등록되어서 사용 가능한 DLL이며 Type Library(.tlb)로 타입 정보를 얻을 수 있다. (RegID, CLSID)로 식별된다. 참조 추가할 경우 *RCW(Runtime Callable Wrapper)를* 통해서 참조한다. Win32 API --------- 반드시 정적 함수로 선언해야하며 타입을 맞게 바꿔줘야한다. 예시:: [DLLImport("user32.dll", EntryPoint="MessageBox")] public static extern int APIMessageBox(int h, string text, string caption, uint type); TaskList ======== TaskList를 이용해서 Visual Studio에서 진행할 작업을 넣을 수 있다. FILE I/O ======== - **File.** 정적 메서드를 멤버로 갖음 - **FileInfo.** 인스턴스화 해서 사용함 - **Directory.** 정적 메서드를 멤버로 갖음 - **DirectoryInfo.** 인스턴스화 해서 사용함 - **Path.** 패스 유틸리티 클래스 - **FileStream.** 이미지나 사운드 파일 - **StreamReader/StreamWriter.** 텍스트 파일 - **BinaryReader/BinaryWriter.** 바이너리 파일 직렬화 ====== [Serializable] 이라는 속성을 이용해 객체 직렬화가 가능하다. 바이너리, XML, Json등으로 직렬화가 가능하다. - **BinaryFormatter.** 바이너리 데이터로 직렬화 - **SoapFormatter.** SOAP 형식의 데이터로 직렬화 - **DataContractJsonSerializer.** Json 형식의 데이터로 직렬화 XML 처리 ======== - **XmlTextReader/XmlTextWriter.** 데이터베이스 ============ - **ADO.NET class.** - **ADO.NET Entity Framework.** - **LINQ to SQL.** ADO.NET Entity Framework ------------------------ **데이터 기반(Data oriented) 소프트웨어를 개발할때** 필요한 기술의 집합이다. ADO.NET 엔터티 추가 - [새 항목] - [데이터] - [ADO.NET 엔터티 데이터 모델] - [데이터베이스의 EF Designer] - DB 연결 정보 입력 및 테이블 선택 엔터티를 추가하면 edmx 라는 파일이 생성되고 이 파일에서 객체 - 테이블의 관계를 확인할 수 있다. 모델 클래스도 같이 생성된다. 간단하게 엔터티 인스턴스를 만들어서 데이터를 조회할 수 있다.:: MyEntity e = new MyEntity(); var result = e.Employees.FirstOrDefault(); 데이터 저장:: r.FirstName = "Choe"; db.SaveChnages(); 간단한 HTTP 통신 ------------------------ HTTP 요청:: HttpWebRequest request = WebRequest.Create("http://www.naver.com") as HttpWebRequest; HttpWebResponse response = request.GetResponse() as HttpWebResponse; //Response System.IO.Stream s = response.GetResponseStream(); WCF(Windows Communication Foundation) ------------------------------------- 응용 프로그램에서 여러 컴퓨터와 비동기적으로 통신할 수 있도록 해주는 프레임워크이다. WCF로 여러가지 서비스를 구성할 수 있다. - WCF Service - WCF Data Service WCF Data Service(ADO.NET Data Services) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ REST를 사용하여 WWW을 통해 데이터를 제공하는 하나의 컴포넌트이다. 절차 1) 먼저 ASP.NET 웹 프로젝트를 만들어야 한다. 2) 새 항목 추가 - WCF Data Service를 추가한다. 3) 새 항목 추가 - ADO.NET 엔터티 데이터 모델 추가한다. 4) DataService의 타입 파라미터로 생성된 엔터티 타입을 전달한다. 5) InitializeService 메서드에서 권한 설정을 한다. 6) 오퍼레이션(메서드)을 생성하고 *SetServiceOperationAccessRule* 에서 메서드를 등록한다. (메서드 생성시 적절한 속성(attribute)을 줘야한다. [WebGet], [SingleResult]) WCF Client ~~~~~~~~~~ WCF Data Service 접속 1) Winform 프로젝트 생성 2) 서비스 참조 추가 3) 네임스페이스 추가 4) LINQ 쿼리로 데이터 조회 컴포넌트 (Component) ~~~~~~~~~~~~~~~~~~~~ Component One, DevExpress Reference ========= - WCF Data Service : https://msdn.microsoft.com/en-us/library/cc668792(v=vs.110).aspx - COM Component Excel : http://net-informations.com/