Environment.TickCount를 써서 게임 루프(Game Loop)를 만들었는데 계산한 FPS와 다르게 나옵니다??? 1. 'Environment.TickCount'의 문제원인을 찾던 중 발견한 내용MS Docs - <a href="https://docs.microsoft.com/ko-kr/dotnet/api/system.environment.tickcount?view=net-6..
이 포스팅에서는 응용프로그램(WinForm, WPF...)에서 ASP.NET를 포함한 웹 서비스를 제공하는 방법을 다룹니다. 퍼블리싱된 파일을 서비스하는 것이 아닙니다. 웹서버를 구현한다고도 볼 수 있는데..... IIS나 Kestrel처럼 퍼블리싱된 파일을 읽어서 서비스하는 방식은 아닙니다. (그렇다고 구현방식이 다른 건 아닙니다 ㅎㅎㅎㅎ) 1. 프로젝트 생성 프로젝트는 ".Net 5 WinForm 애플리케이션"으로 생성합니다. 여기서는 "웹 응용 프로그램 MVC (모델-뷰-컨트롤러)"로 생성합니다. 'Form1'의 이름을 'MainForm'으로 바꿉니다. 폼을 다음과 같이 구성합니다. 버튼을 누르면 브라우저가 열리도록 코드를 넣습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ..
'.NET Core 3'에서 클래스 라이브러리(Class Library)를 사용할 때 사용할 수 있는 'ASP.NET Core MVC'의 버전은 3.1.0 버전입니다. *2020-08-10 기준 1. '.NET Core 2'에서는 어떻게 했는가?'.NET Core 2'에서는 'ASP.NET Core MVC'를 참조하려면 누겟에서 찾아서 설치해야 합니다. 그런데 업데이트가..... 쓰려면 쓸 수는 있는데 버전이 낮아서 생기는 문제들이 좀 있습니다. '.NET Core 3'에서도 사용하려면 사용 할 수 있습니다. 2. '.NET Core 3 MVC'는 어디 있는가?'.NET Core 3'에서는 프래임웍에 포함되어 있습니다. 그렇다는 건 그냥 참조하면 되는데.... 자동으로 참조가 되지 않습니다. 이게 프레임..
크로미움을 참조한 윈폼 프로젝트를 배포했더니 실행도 안 되고 에러 메시지도 없이 반응이 없습니다. 그래서 이벤트 뷰어를 봤더니.... 1. 에러 원인원래 'System.IO.FileNotFoundException'에러는 파일을 찾지 못한 경우 발생합니다.하지만..... 크로미움을 참조할 때 사용하는 'CefSharp'를 참조했는데 'VC++ 2013/2015 Redistributable Package'가 설치되지 않은 경우에도 발생합니다.(참고 : github CefSharp - Frequently asked questions ) 2. 해결방법너무나 당연하게도 'VC++ 2013/2015 Redistributable Package'를 설치하면 됩니다.다운로드 : Microsoft Visual C++ 20..
비트 연산을 하면 한 변수에 여러 옵션을 넣었다 뺐다 하는 효과를 줄 수 있습니다. 이 비트 연산을 열거형 맴버로 한다면 직관적으로 특정 옵션이 들어 있는지 확인하는 것이 가능하죠. 많은 언어가 열거형 맴버를 비트 연산에 활용할 수 있습니다. 닷넷(.Net)에서 어떻게 사용하는지 알아봅시다. 연관글 영역 1. 원리 이해하기 비트 연산의 원리를 간단하게 알아봅시다. 열거형 멤버의 비트 연산은 선언된 값의 합이 다른 멤버의 값과 절대로 겹치지 않는다는 것을 전제로 진행됩니다. (참고 : MSDN - 열거형 디자인) 아래와 같이 열거형 멤버를 선언합니다. /// /// 권한1 옵션 /// public enum Auth1Type { None = 0 , Opt0 = 1 , Opt1 = 2 , Opt2 = 4 , ..
닷넷 코어를 쓰고 나서부터........API결과는 'camelCase'로 온다고 느끼고 있었습니다. 이걸 'PascalCase'로 바꿔 봅시다. 1. 카멜케이스(camelCase)와 파스칼케이스(PascalCase) 코드 표기법에는 여러 가지가 있는데 그중 많이 쓰는 것이 카멜케이스(카멜표기법)와 파스칼케이스(파스칼표기법)입니다. 파스칼케이스는 단어를 대문자로 시작하고 붙여 씁니다. 예> PascalCase 카멜케이스는 파스칼케이스에 첫 대문자만 소문자로 표시합니다. 예> camelCase 2. C#에서는.... 그런데 C#의 네이밍 규칙의 기본은 파스칼케이스입니다. 그런데 API에서 모델을 결과로 전달하면 카멜케이스로 넘어옵니다. 3. 파스칼케이스로 바꾸기 필요한 부분만 바꾸는 방법과 전체를 기본 정..
가상디렉토리에 프로젝트를 만들어서 올렸더니 HTTP Error 500.0 - ANCM In-Process Handler Load Failure 1. 오류 상황이게 무조건 발생하는 것은 아니고 닷넷 코어 2.2이상을 사용 시 가상디랙토리 사용 시 특정 상황에서 발생합니다. 'InProcess'는 IIS 응용프로그램 풀에서 동작합니다.(참고 : Rick Strahl님 블로그 - ASP.NET Core In Process Hosting on IIS with ASP.NET Core )'InProcess'를 사용하고 있을때 'dotnet.exe'에서 사용하려고 하면 발생한다고 합니다. 일반적인 상황에서는 'InProcess'를 권장한다고 합니다. 2. 해결 방법간한 하게 'web.config'에서 'hosting..
C# 클래스(Class)나 모델(Model)을 Json파일로 저장했다가 다시 불러서 모델에 바인딩하기는 쉽습니다. 한단계씩 따라 해 봅시다. 1. 준비 누겟(Nuget)에서 'Newtonsoft.Json'를 찾아 설치해 줍니다. 'TestData001.cs' 클래스를 생성합니다. /// /// 테스트용 모델1 /// public class TestData001 { public string StrData1 { get; set; } public string StrData2 { get; set; } public int IntData1 { get; set; } public int IntData2 { get; set; } } 'TestData002.cs' 클래스를 생성합니다. public enum Test1Typ..
트라이~캐치(try~catch)는 런타임에서 오류를 잡아내는 좋은 방법의 하나 입니다. 문제는 디버그할 때는 오류 위치가 잡히지 않기 때문에 오류 추적이 힘들다는 문제가 있죠. 1. 트라이 캐치도 조건문을 사용할 수 있다. 캐치(catch)에 조건을 줘서 원하는 조건에 중단 점이 동작하도록 할 수 있습니다. 캐치문 뒤에 웬(when)문을 붙여 사용할 수 있습니다. (참고 : Microsoft docs - try-catch(C# 참조) ) catch (ArgumentException e) when (e.ParamName == "…") { } 이런 식으로 말이죠. 2. 활용하기 간단하게 예제를 만들어 봅시다. 버튼을 몇 개 만들고 시작 버튼을 하나 만듭니다. 버튼들은 변수의 상태를 바꿔주는 기능을 넣고 시작..
.net에서 소켓 프로그래밍을 하려면 몇 가지 선택사항이 있는데 그중 하나가 'SocketAsyncEventArgs'입니다. 전에 '[.Net] SocketAsyncEventArgs - 큰 데이터(Large Data) 전송할 때 생기는 문제'라는 글에서 버퍼크기보다 큰 데이터가 오는 경우 어떤 일이 발생하는지 다루었습니다. (참고 - [.Net] SocketAsyncEventArgs - 큰 데이터(Large Data) 전송할때 생기는 문제 ) 그렇다면 'SocketAsyncEventArgs'를 이용하여 큰 데이터(Large Data)나 연속 메시지(Continuous Receive)에 의한 리시브데이터 뭉침 현상을 어떻게 처리해야 하는지를 알아보겠습니다. 이 포스팅의 완성된 코드는 공개프로그램에서 확인할..