전체 글
-
.NET Framework 인증서로 인한 설치 실패그 외 2021. 8. 24. 01:19
1. 개요 .NET Framework 오프라인 버전 설치 시 인증서 관련 오류로 인해 설치 불가한 경우가 있습니다. 인증서 체인은 처리되었지만, 신뢰 공급자에 의해 신뢰되지 않는 루트 인증서에서 중지되었습니다. (0x800b0109) A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider. 보안 업데이트가 덜 이루어졌거나 설치 직후의 Windows 7 환경에서 발견할 수 있었는데 Windows 8 이상의 환경에서도 인증서 문제가 생기면 발생할 수도 있는 현상으로 보입니다. 어쨌든 위와 같은 문제가 생긴 경우 설치할 수 있도록 조치할 수 있는 방안에 대해 알아보겠습..
-
C++ 빌드 후 출력 파일 경로Visual Studio 2021. 8. 15. 22:12
1. 개요 기본적으로 빌드 후 출력 파일의 경로는 '출력 파일' 항목에서 하나만 지정 가능합니다. 그러나 개발 목적의 특성상 출력 파일의 경로와 형태(define 처리) 등을 다양하게 처리해야 할 수도 있습니다. 이에 대응할 여러가지 방법들이 있겠지만 이 중 몇가지 방법과 그 요소를 작성해봅니다. 2. 자동화 스크립트 사용 여러 복잡한 작업의 처리를 위해 batch, bash, python, powerShell 등의 스크립트를 사용하기도 합니다. 가령 아래와 같이 MSBuild.exe로 C++ 프로젝트가 있는 솔루션을 빌드 한다고 했을 때, set VS2019DEVENV="%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Current..
-
Wix 요소의 기본 구조WiX Toolset 2021. 7. 31. 19:14
1. 개요 앞서 작성했던 간단한 Wix Toolset 설치본 제작 포스팅에서 사용한 Wix 프로젝트의 구조와 요소들의 설명입니다. 2. XML declaration and Wix element 모든 WiX 프로젝트는 최상위 단계에 XML 선언과 Wix 요소로 시작합니다. Wix 요소 내의 xmlns(XML namespace) 속성은 핵심 Wix 요소를 로컬 범위로 가져옵니다. 일반적인 XML과 동일하게 파일의 끝은 와 같이 Wix 요소를 닫는 것으로 끝내야 유효합니다. 이 선언과 요소는 기본적으로 사용되는 구조라고 생각하시면 되겠습니다. 3. Product 가장 먼저 아래와 같이 Product 요소를 추가 합니다. 이 요소에서는 설치하려는 제품의 이름, 언어, 버전, 제조업체의 특성 등의 정보를 정의합니..
-
간단한 WiX Toolset 설치본 제작WiX Toolset 2021. 6. 20. 00:55
1. 개요 WiX Toolset은 Visual Studio의 확장으로 사용하여 간편하게 사용 할 수 있습니다. 그래서 다른 여러 문서들의 소개에서도 보통 비주얼 스튜디오의 확장으로 사용하는 기준으로 작성되고 있었습니다. 여기서는 WiX 바이너리 만을 사용하여 간단한 msi 프로그램을 생성한 후 설치, 삭제를 하는 과정을 통해 WiX Toolset을 가볍게 찍먹해 보도록 하겠습니다. 2. WiX 다운로드 및 압축 해제 우선 WiX Toolset 공식 사이트(https://wixtoolset.org/releases)에서 바이너리들을 다운로드 합니다. 본 문서를 보시는 시간에 따라서 버전은 약간 달라질 수 있습니다. Wix Toolset Github에서 바이너리를 다운로드 합니다. 다운로드 받은 압축 파일을 ..
-
아이템 23: 타입 매개변수에 대해 메서드 제약 조건을 설정하려면 델리게이트를 활용하라C# 2021. 5. 27. 01:57
1. C#에서의 제약 조건 설정 - 언뜻 보면 C#에서 제약 조건을 설정하는 방법에는 한계가 많은 것처럼 보인다. - 베이스 클래스 타입이나 특정 인터페이스로 제약 조건을 설정 - class 타입이나 struct 타입으로 형태를 제한 - 매개변수가 없는 생성자를 가져야 한다는 조건 정도 설정 - 임의의 static 메서드를 반드시 구현해야 한다거나 매개변수를 취하는 생성자를 반드시 구현하도록 제약 조건을 설정할 수는 없다. - 제한적이지만 인터페이스를 통해서 제약 조건을 설정할 수는 있지만 추가적으로 해야 할 작업이 너무 많고 기본적인 구조도 해칠 수 있다. 2. 인터페이스를 이용한 메서드 제약 - 어떤 제네릭 클래스에 대해 타입 매개변수 T가 반드시 Add() 메서드를 가져야 한다는 제약 조건을 설정하..
-
오버워치 레킹볼 플라스틱 모델그 외/게임 2021. 5. 19. 18:17
작년 8월 평소와 같이 오버워치 눈송이 이벤트에 응모하고 꽝을 반복하고 있던 와중에 생각지도 못한 레킹볼 플라스틱 모델에 당첨되었습니다. 10월 30일 배송 시작이니까 11월 중에는 받겠거니 생각했습니다. 그러던 와중에 문자를 하나 받게 되었는데... 어차피 경품으로 받는 건데 얼마나 고퀄리티로 제작하려고 저렇게나 지연을? 그렇게 2월까지 기다렸는데도 소식이 없다가 또 한 문자를 받게 되었는데... 이미 반년이 지연되었는데 여기서 또 지연을?! 사실 이쯤 되었을 때는 존재 자체를 좀 잊어먹고 있긴 했습니다. 그래서 이번엔 진짜로 오겠지라고 생각하고 있었는데... 오 여기서 3연벙...이 아니라 3연 지연을?! 사실 저도 제품 배포를 위해 일 할 때도 중간에 엎을 때도 많고, 배포 직전에도 다시 빌드부터 ..
-
아이템 19: 런타임에 타입을 확인하여 최적의 알고리즘을 사용하라C# 2021. 5. 17. 00:52
1. 요약 - 타입에 대한 제약 조건을 거의 사용하지 않으면서도 타입 매개변수로 지정될 가능성이 있는 타입들의 고유한 특성을 고려하고 특화된 기능들을 최대한 활용하여 제네릭 타입을 만드는 방법 2. 제네릭 타입과 구체적인 타입의 관계 - 제네릭 타입의 경우 타입 매개변수에 새로운 타입을 지정하여 손쉽게 재사용 가능. - 코드를 덜 작성해도 되므로 유용하나 구체적인 타입이 주는 장점을 잃고 최적화한 알고리즘 사용 불가. - C#은 이 부분도 고려했으므로 만약 어떤 알고리즘이 특정 타입에 대해 더 효율적으로 동작한다고 생각된다면 그냥 그 타입을 이용하도록 코드를 작성하라. - 이를 위해 제약 조건을 설정하는 것이 항상 효과적인 방법은 아님. - 제네릭의 인스턴스화는 런타임의 타입을 고려하지 않고 컴파일 타임..
-
아이템 15 : 불필요한 객체를 만들지 말라C# 2021. 5. 9. 02:10
1. 요약 - 제목이 곧 내용 - GC가 메모리를 효율적으로 관리하지만 힙에서 객체 생성/제거는 여전히 시간 필요 - GC가 과도하게 동작하지 않도록 주의 2. 자주 사용되는 지역 변수를 멤버 변수로 변경 // Paint 이벤트 핸들러 내에서 GDI 객체를 할당하는 경우 protected override void OnPaint(PaintEventArgs e) { // 나쁜 예. Paint 이벤트가 발생할 때마다 동일한 폰트를 생성한다. using(Font MyFont = new Font("Arial", 10.0f)) { e.Graphics.DrawString(DateTime.Now.ToString(), MyFont, Brushes.Black, new PointF(0, 0)); } base.OnPaint(..