C#

    [C#] ERROR CS8107: '기본 리터럴'기능은 C# 7.0에서 사용할 수 없습니다.

    [C#] ERROR CS8107: '기본 리터럴'기능은 C# 7.0에서 사용할 수 없습니다.

    비쥬얼 스튜디오 2017 버전에서 프로젝트를 불러와 빌드했을 때 이러한 에러가 발생했습니다. 아마도, 해당 프로젝트가 보다 높은 버전에서 작성되었기 때문에 빌드할때 이러한 문제가 발생하는 것 같은데요. 에러 우측에 보면 해당 프로젝트 리스트가 나와있는데 이 프로젝트의 속성에 들어가시고 빌드 - 고급을 선택해줍니다. 여기서 빌드 언어 버전을 C# 7.1이상으로 잡아주면 에러 없이 빌드가 정상적으로 동작합니다.

    소스 코드 분석을 위한 소나 큐브(Sonar Qube) 사용법

    소스 코드 분석을 위한 소나 큐브(Sonar Qube) 사용법

    1. 소나 큐브 다운로드 https://www.sonarqube.org/downloads/ Download | SonarQube Get the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page. www.sonarqube.org 커뮤니티 버전을 다운받고 압축된 파일을 마음에 드는 곳에 풀어줍니다. 이 글을 작성 당시의 소나큐브 버전은 9.1.0버전입니다. 소나큐브는 소스 코드를 분석하기 위한 툴로 여기서는 C#으로 작성한 코드를 기준으로 테스트 해보려고 합니다. 압축을 푼 경로에서 bin 폴더에 들어가서 해당 운영체제에 맞는 폴더에 들어가서 Sta..

    WPF Fody 사용 방법

    WPF Fody 사용 방법

    WPF Fody 1. 개요 WPF의 MVVM 패턴으로 코드를 작성하면서 변수 마다 get, set메서드를 작성하고 PropertyChange 이벤트 알림을 호출하는 방법이 상당히 비효율적이라고 느껴졌습니다. 이러한 변수들이 한 두개가 아니고 수십개, 수백개로 늘어나게 되면… 코드의 구조가 바뀌게 되면 이러한 모델 데이터도 바꾸어야 하기 때문에 코드 수정량이 많아집니다. 최근 Java의 Lombok이라는 다이어트 코드 라이브러리를 사용하면서 WPF에서도 위와 같은 코드 다이어트가 가능하지 않을까라는 생각에 조금 찾아보았는데 Fody라는 라이브러리를 발견했습니다. 처음에는 DevExpress의 Poco 라이브러리가 있어서 Telerik환경에서 poco를 사용할 수 있지 않을까 생각해보았지만 Fody라는 좋은..

    [C#] nuget package manager console 사용 방법

    [C#] nuget package manager console 사용 방법

    C# 기반으로 프로그래밍을 하면서 외부 라이브러리를 사용할 때가 있는데, nuget 패키지 관리자에서 검색을 해도 검색이 되지 않는 라이브러리들이 있습니다. 웹을 뒤져보면 따로 링크는 안걸려있고, 위와 같은 코드 딸랑 한 줄 뿐... 리눅스를 해보신 분이면 아! 저 코드를 콘솔창에 입력하면 설치가 이루어지는구나! 하고 아시겠지만 단순히 프로그래밍과 GUI에 익숙하신 분들에게는 낯설 겁니다. 이럴 때 nuget package manager console, 패키지 관리자 콘솔을 이용해주시면 됩니다. 어려워 보이긴 하지만 의외로 엄청 쉽다는 점. 도구 - NuGet 패키지 관리자 - 패키지 관리자 콘솔에 들어가 줍니다. 그러면 하단에 패키자 관리지 콘솔 창에 생길 텐데 여기서 설치할 라이브러리의 설치 코드를 ..

    [C#] Lazy Initialization(지연 초기화)란?

    Lazy Initialization Lazy Initialization이란, 사용자가 실제로 필요할 때만 로딩을 하여 데이터 낭비를 줄이게 하는 방법입니다. 직역하면 개체를 처음 사용할 때까지 생성을 지연시킨다는 의미입니다. 예를 들어, C#이나 Java로 구현한 HMI 화면이 전환될 때 사용자가 요구치 않은 데이터까지 로드를 해버리면 로드될 때마다 응답속도가 느려지게 되어서 효율적으로 데이터를 사용하고 있다고는 보기 어렵습니다. Web에서도 사용자가 특정 웹 페이지를 방문을 했는데, 해당 페이지에 총 80장의 이미지가 있다고 가정을 합니다. 이미지의 크기는 한 5~6장 정도면 사용자가 보는 화면에 꽉 차는 상황이에요. 이 80장의 이미지를 전부 한꺼번에 로딩을 하게 되면 효율성이 있다고 볼 수 있을 까..

    [WPF] Text String Format Binding 사용 방법

    [WPF] Text String Format Binding 사용 방법

    WPF MVVM 패턴을 사용해서 Text를 바인딩 할 때 위처럼 퍼센트나, 3자리씩 끊기 같이 수치적으로 표현을 해야할 때가 있는데 아래와 같이 사용하면 됩니다. Text="{Binding TodayVt2EssSoc, StringFormat={}{0} %}" // 바인딩 한 값 뒤에 % 달기 Text="{Binding TodayVt2EssSocTarget, StringFormat=\{0:N0\} kWh}" // 바인딩한 값이 숫자면 10,000과 같이 세자리 앞에 ,를 추가하고 그 값 뒤에 kWh 달기 Binding 변수는 임의로 지정하면 되고, StringFormat 뒤에 적절하게 정규표현식을 작성해주면 됩니다. private int todayVt2EssSoc; private int todayVt2Es..

    [WPF] UserControl에 Binding하기 위한 DependencyProperty 사용 방법

    [WPF] UserControl에 Binding하기 위한 DependencyProperty 사용 방법

    UserControl에 Binding하기 위한 DependencyProperty 사용 방법 이전 포스트에서 Usercontrol에 Property를 추가하는 방법을 기술했는데, WPF는 기본적으로 MVVM패턴을 사용하기 때문에 Xaml에서 사용한 컴포넌트를 ViewModel 쪽에서 Binding으로 묶어야하는 암묵적인 규약이 있습니다. 따라서 Usercontrol로 사용자가 임의로 지정해서 생성한 컴포넌트에 대해서도 Binding을 할 수 있어야 하는데 이때 DependencyProperty를 사용함으로 Binding을 할 수 있게 됩니다. 무슨 소리냐, 간략하게 얘기하자면 내가 자주 사용될 것 같은 TextBlock의 디자인을 Usercontrol을 사용해서 별도로 했는데, 이 TextBlock의 Te..

    [WPF] UserControl 에서 Property 속성 추가 방법

    [WPF] UserControl 에서 Property 속성 추가 방법

    [WPF] UserControl 에서 Property 속성 추가 방법 컴포넌트 + 컴포넌트로 사용자 정의 컴포넌트를 생성하고 싶을때 UserControl이라는 Xaml을 생성해서 사용합니다. 일반적인 예시로 색상이 있는 TextBlock과 검은색으로 지정된 TextBlock이라는 컴포넌트를 생성했습니다. 1. UserControl의 Xaml 코드 ST1Canvas.xaml이라는 이름으로 UserControl을 생성했고요, 위 자멜 코드와 같이 TextBlock에 x:Name 태그로 임의의 이름을 지정해줍니다. 2. ST1Canvas.cs의 코드 namespace EPCM.HMI.Market.Component { /// /// ST1Canvas.xaml에 대한 상호 작용 논리 /// public parti..