본문 바로가기

.NET

(219)
엔터 프라이즈 엔터 프라이즈 프레임 워크 코어 출처: https://www.codeproject.com/Articles/1160586/Entity-Framework-Core-for-Enterprise 소개엔터프라이즈 애플리케이션을위한 설계는 소프트웨어 개발에서 공통적 인 문제이며 우리가 직무에 대해 선택한 기술에 따라 최선의 방법으로이 문제를 해결할 수있는 방법입니다.이 가이드에서는 엔터프라이즈 설계자의 공통 요구 사항을 살펴 보겠습니다.이 가이드에서는 EntityFramework를 사용 하겠지만이 개념은 Dapper 또는 다른 ORM에 적용됩니다.배경엔터프라이즈 응용 프로그램의 아키텍처에는 최소한 다음 수준이 있어야합니다.엔티티 계층 : 엔티티 (POCO)데이터 영역 : 데이터베이스 액세스와 관련된 모든 코드 포함비즈니스 계층 : 비즈니스 와 관련..
가독성 높은 XAML 작성 출처: https://www.codeproject.com/Tips/1212669/Formating-XAML-for-readability 서론과 문제의 근원VS 디자이너 또는 블렌드를 사용하여 XAML 뷰를 디자인하고 만드는 경우 모든 속성이 단일 행에 작성됩니다.이 동작은 코드 유지 보수성 및 버전 제어 시스템에 좋지 않습니다. 이러한 XAML을 손쉽게 편집 할 수는 없습니다. 속성에서 손실 될 수 있기 때문입니다.또한 모든 버전 제어 시스템은 회선 차등 추적을 기반으로합니다. 즉, 속성 변경으로 전체 행이 변경되므로 파일의 두 상태 간 차이점을 쉽게 볼 수 없습니다.가능한 해결책늘 그렇듯이이 문제를 극복하는 몇 가지 방법이 있습니다. 첫 번째 방법은 수동으로 수행하는 것입니다. 이상적으로는 각 속성을 ..
windbg - .NET 4.0 이상의 환경에서 모든 DLL에 대한 심벌 파일을 로드하는 파이썬 스크립트 http://sysnet.pe.kr/221118501980지난 글에서 .NET 4.0 이상의 환경에서 DLL에 대한 심벌 파일 로드에 대해 알아봤습니다. windbg - .NET 4.0 이상의 환경에서 DLL의 심볼 파일 로드 방법 ; http://www.sysnet.pe.kr/2/0/11330 그런데, 규모가 좀 있는 프로그램이라면 DLL이 꽤나 많을 텐데 언제 저런 작업을 하고 있겠습니까? ^^ 그래서 예전에 소개한 pykd를 이용해, windbg에서 python 스크립트 실행하는 방법 - pykd ; http://www.sysnet.pe.kr/2/0/11227 다음과 같은 확장 스크립트(symbol_net.py)를 만들었습니다. from pykd import * def getItem(text, ke..
windbg - .NET 4.0 이상의 환경에서 DLL의 심벌 파일 로드 방법 http://sysnet.pe.kr/221118490429전에 설명한 데로 .NET 4.0부터 DLL 로드를 LoadLibrary Win32 API를 이용하지 않기 때문에 모듈 목록에 DLL이 나타나지 않습니다. coreclr 소스 코드로 알아보는 .NET 4.0의 모듈 로딩 함수 ; http://www.sysnet.pe.kr/2/0/11326 이 때문에 !savemodule 등의 명령어를 위해 모듈에 대한 주소가 필요할 때는 임시로 !name2ee의 출력 결과를 이용해야만 했는데요. windbg의 lm 명령으로 보이지 않는 .NET 4.0 ClassLibrary를 명시적으로 로드하는 방법 ; http://www.sysnet.pe.kr/2/0/11256 위의 내용을 정리하면 모듈 주소를 .reload /..
C# - 오피스 엑셀 97-2003 .xls 파일에 대해 32비트/64비트 상관없이 접근 방법 http://sysnet.pe.kr/221117653467오피스 엑셀(Excel) 구 버전의 포맷(Excel 97-2003 Workbook)으로 저장된 파일(.xls)을 C#에서 접근하려면 "Microsoft.ACE.OLEDB.12.0" 제공자를 이용해 접근하시면 됩니다. 그런데 근래의 Office 2016 제품군의 엑셀을 설치하는 경우 기본적으로 Microsoft.ACE.OLEDB.12.0 제공자는 컴퓨터에 설치되어 있지 않습니다. 따라서 다음의 경로에서 제공하는 파일을 설치해 줘야 합니다. Microsoft Access Database Engine 2010 Redistributable ; https://www.microsoft.com/en-us/download/details.aspx?displayla..
C# - 하나의 바이너리로 환경에 맞게 32비트/64비트 EXE를 실행하는 방법 http://sysnet.pe.kr/221117637558닷넷 프로그램에서 AnyCPU를 사용하면 32비트/64비트 운영체제에서 그에 맞게 실행됩니다. 그런데 때로는 64비트에서조차도 32비트로 실행하고 싶은 경우가 있습니다. 현실적인 예를 하나 들면, OLEDB 데이터 제공자가 64비트만 설치된 시스템이 있다면 그것을 이용하는 프로그램도 64비트로 실행해야 합니다. 반면 32비트 제공자만 설치된 경우라면 프로그램 역시 32비트로 동작해야 합니다. 이럴 때 사용할 수 있는 트릭으로 sysinternals 도구처럼 64비트 용 실행 파일을 리소스로 포함하고 있다가 적절한 환경에 맞게 실행하는 방법이 있습니다. 간단하게 한번 만들어 볼까요? ^^ 우선 다음의 글에 설명한 내용으로 .csproj 파일의 Ass..
coreclr 소스코드로 알아보는 .NET 4.0의 모듈 로딩 함수 http://sysnet.pe.kr/221117458825(그냥 기록 차원에서 남겨둡니다. ^^) .NET 4.0 이후부터 DLL을 LoadLibrary로 로딩하지 않는다고 했습니다. CLR 4.0 환경에서 DLL 모듈의 로드 주소(Base address) 알아내는 방법 ; http://www.sysnet.pe.kr/2/0/11325 정말 그럴까요? ^^ 이를 알아보기 위해 coreclr 소스 코드를 이용해 추적해 봤습니다. 우선 단서는 GetHINSTANCE를 역어셈블한 코드에서 시작했습니다. [SecurityCritical] public static IntPtr GetHINSTANCE(Module m) { if (m == null) { throw new ArgumentNullException("m")..
CLR 4.0 환경에서 DLL 모듈의 로드 주소(Base address) 알아내는 방법 http://sysnet.pe.kr/221117004140(예전에도 잠깐 언급했지만) CLR 4부터, 그러니까 .NET Framework 4부터 DLL 로딩을 Win32 API의 LoadLibrary를 이용하지 않도록 바뀌었기 때문에 네이티브 모듈 열거에서는 .NET 모듈이 누락되는 문제가 있습니다. 가령 다음의 코드를, // 이 코드를 실행하는 콘솔 프로그램은 ClassLibrary1.dll을 참조해 사용하고 있음 foreach (ProcessModule item in Process.GetCurrentProcess().Modules) { Console.WriteLine(item.FileName + ": 0x" + item.BaseAddress.ToString("x")); } .NET 2.0 ~ 3.5에..