.NET 4.x에서 'SocketAsyncEventArgs'를 쓰다가 그대로 .NET 5로 업그레이드하면 'Completed'이벤트가 오지 않는 현상이 있습니다. (참고 : github - DGSocketAssist/DGSocketAssist1/) 아래 스크린 샷은 .NET 4에서 만든 'SocketAsyncEventArgs'를 .NET 5에서 사용한 경우입니다. 'SaeaSend_Completed'이벤트가 오지 않은 걸 확인할 수 있습니다. 아래 스크린 샷은 .NET 4에서 정상 작동한 경우입니다. 이것은 .NET 5부터 'ReceiveAsync', 'SendAsync'가 동기로 동작하기 때문입니다. 이 포스팅은 'ReceiveAsync'을 기준으로 설명합니다. ('SendAsync'도 똑같기 때문) ..
닷넷은 사운드 처리가 개떡 같습니다. 'SoundPlayer'는 멀티플랫폼에서 동작하지 않습니다. 이 꼬라지인 이유를 아직도 모르겠습니다... (최소한 기본 구현은 있어야 하는 게 아닌지....) 특히 크로스 플랫폼 작업 시 선택지가 애매해지는데...... 그나마 쓸 수 있는 가벼운 라이브러리인 'NetCoreAudio'를 소개합니다. 1. 'NetCoreAudio' 특징 이 라이브러리는 여러 플랫폼에 사용할 수 있습니다. 단점은 기본 사운드 API인 'SoundPlayer'처럼 한 번에 하나뿐이 재생을 못 합니다. 자세한 분석은 '3. 분석'에서 하겠습니다. 2. 설치 및 사용 누겟(NuGet)에서 'NetCoreAudio'를 찾아 설치해 줍니다. 간단한 예제 기본 예제는 잘되어 있습니다. 참고 : g..
'System.InvalidOperationException'에러는 이미 'SocketAsyncEventArgs'개체가 사용 중인 경우 발생합니다. 1. 원인 분석 이 라이브러리로 만든 프로그램이 몇 개인데 이런 에러가 있었다고?? 라는 생각을 하며 클라이언트의 상세 로그를 봤더니..... 강조된 로그가 3줄인데 첫 줄과 마지막 줄은 각각 다른 요청입니다. 첫 번째 줄은 주기적으로 서버에 보내는 내용이고 세 번째 줄은 사람이 직접 서버에 요청하는 내용입니다.... 우연의 결과로 밀리초까지 일치해버린것입니다!!!!!! 같은 증상으로 죽어버린 다른 클라이언트의 로그도 동일합니다. (아래 로그) 동시에 하나의 'SocketAsyncEventArgs' 개체를 사용하여 보내기(Send)를 하려고 해서 발생한 오류..
라떼판다의 윈도우이미지가 이상한 건지 라떼판다 자체 문제인지는 몰라도 몇 대가 이 증상이 일어났습니다. 웃긴 건 에러 난 라떼판다의 이미지를 그대로 떠서 다른 라떼판다에 연결하면 됩니다 ㅋㅋㅋㅋㅋㅋㅋ '0x80004005' 오류코드 자체는 닷넷 설치가 제대로 되지 않았음을 의미하는 코드입니다. (참고 : [.NET] 닷넷 프래임웍의 오류인 "CLR error: 80004005." ) 그런데 구성 파서에서 오류가 났다 굽쇼??? 연관글 영역 1. 일반적인 경우 이것저것 모르겠으면 해당 버전의 닷넷 프레임워크(.NET Framework)를 복구해 보거나 지웠다 다시 설치해 보는 게 좋습니다. 그런데 이번 경우는 재설치 자체가 불가능한 상황이었습니다. 윈도우업데이트 중에 4.x대를 강제로 설치하는 업데이트가 ..
.NET에서 별다른 옵션 없이 출력하면 파일이 여러 개가 생성됩니다. 참조가 많다면 더 많은 파일이 생성되죠. 단일 파일로 배포하는 방법을 알아봅시다. * 이 기능은 '.NET Core 3.0' 이상 버전에서만 사용할 수 있습니다. * 1. 게시 .NET에 있는 '게시' 기능이 있습니다. 이 기능을 이용하여 편하게 배포할 수 있죠. 프로젝트에서 오른쪽 클릭 > 게시 파일로 출력하면 릴리즈(Release) 폴더의 내용과 거의 같습니다. 그러니 파일로 배포하려는 경우 릴리즈 폴더만 압축해서 배포해도 상관없습니다. 2. 단일 파일 생성 파일로 배포하면 압축해서 하나의 파일만 배포해도 되니 신경을 안 쓰고 있었는데.... 아무래도 파일이 많다 보니 컴퓨터에 익숙하지 않은 사람들은 1) 실행파일을 찾지 못하거나 ..
EF(Entity Framework)에서 FK(foreign key)를 걸면 자동으로 List 타입을 관리해줍니다. FK가 개발 중에는 좋은데 서비스 중에는 좀 단점이 있고(특정 데이터를 수동으로 지우려면 연결된 FK를 순서대로 뒤에서부터 지워야 함.) 자동으로 바인딩 되다 보니 무분별하게 난발하게 돼서 속도를 다 까먹는 문제가 있습니다. (잘 관리하면 좋긴 합니다. ㅎㅎㅎ) EF는 FK로 묶인 데이터에 접근하면 인덱스로 전체 선택(select)해서 처리하기 때문입니다. ㅎㄷㄷ 그래서 저는 가급적 FK를 안 쓰고 수동으로 선택(select)해서 사용하는 방법을 사용합니다. 그러다 보니 EF에서 리스트형 데이터들은 어떻게 처리되는지 궁금해졌습니다. 1. 배열과 리스트 모델을 아래와 같이 선언하고 마이그레이..
1. 오류 발견 지정된 파일을 찾을 수 없다는 에러가 나는데 수동으로 파일을 읽어도 잘 읽어지고, 'File.ReadAllText'를 써도 잘 읽어집니다. 웃긴 건 이걸 DLL로 만들어 쓰고 있었는데 원본 테스트에서는 아무런 문제가 없고, 에러 나는 타이밍은 파일을 읽을 때가 아니고 경로를 전달할 때입니다??? System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. 지정된 파일을 찾을 수 없습니다. File name: 'Newtonsoft.Json, Version=13.0.0.0, Cultu..
다른 포스팅에서 한번 다룬 내용이지만 그 포스팅은 종합적인 내용이라 검색하기 좋게 분리한 내용입니다. 연관글 영역 1. 증상 콘솔 애플리케이션(console application)에서 'F11'을 누르면 전체화면으로 전환됩니다. 이렇게 되면 키 이벤트로 'F11'을 받을 수 없게 됩니다. 2. 해결 'WinAPI'를 이용하여 '시스템 입력'을 꺼주면 됩니다. '시스템 입력'을 끄게 되면 'Ctrl + C' 같은 시스템 단축키도 동작하지 않습니다. 'WinAPI'를 사용하려면 1) 애플리케이션의 핸들을 가지고 와서 2) 콘솔 모드를 읽은 후 3) 읽은 모드를 변경하고 4) 변경된 콘솔 모드를 적용 하면 됩니다. 2-1. 사용할 함수 마샬링 필요한 함수는 GetStdHandle : 애플리케이션의 핸들을 가지..
다른 포스팅에서 한번 다룬 내용이지만 그 포스팅은 종합적인 내용이라 검색하기 좋게 분리한 내용입니다. 연관글 영역 1. 증상 콘솔 애플리케이션(console application)에서 콘솔 창을 클릭하거나 드래그하면 응용프로그램이 멈추는 현상 있습니다. 이것은 '빠른 편집 모드(Quick Edit Mode)'가 활성화 되어 있기 때문입니다. 2. 해결 'WinAPI'를 이용하여 '빠른 편집 모드'를 꺼주면 됩니다. 'WinAPI'를 사용하려면 1) 애플리케이션의 핸들을 가지고 와서 2) 콘솔 모드를 읽은 후 3) 읽은 모드를 변경하고 4) 변경된 콘솔 모드를 적용 하면 됩니다. 2-1. 사용할 함수 마샬링 필요한 함수는 GetStdHandle : 애플리케이션의 핸들을 가지고 오는 함수 GetConsole..
엔티티 프레임워크 같은 프레임워크를 객체 관계형 매핑(Object–relational mapping), 줄여서 ORM이라고 부릅니다. 이런 프레임워크의 장점 중 하나가 약간의 작업만 하면 다양한 DB를 연결할 수 있다는 것입니다. 이 포스팅에서는 'SQLite'와 'MSSQL'를 따로따로 마이그레이션하고 사용하겠습니다. 다른 DB도 얼마든지 추가할 수 있습니다. 연관글 영역 0. 프로젝트 생성 DB 테이블 모델과 컨텍스트(DbContext)를 관리할 프로젝트를 생성합니다. 여기에서 마이그레이션 버전관리가 이루어집니다. '클래스 라이브러리'로 프로젝트를 생성합니다. (프로젝트 이름 : EfMultiMigrations) 누겟에서 아래 종속성을 찾아 설치합니다. Microsoft.EntityFrameworkC..