Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

닷넷 6 프로젝트의 "Conditional compilation symbols" 기본값 오류

Visual Studio 2022의 현재 버전(17.2.6)에서는 프로젝트 속성의 "Conditional compilation symbols" 값을 보면 다음과 같이 나옵니다.

$(DefineConstants)TRACE

사실 값 자체에는 오류가 있지만, 이 상태에서는 프로그램에 아무런 영향을 끼치지는 않습니다. 실제로 다음과 같이 코드를 작성하고,

using System.Diagnostics;

Trace.WriteLine("TEST_TRACE");
Debug.WriteLine("TEST_DEBUG");

빌드하면 "Output" 창에 다음과 같이 "TEST_TRACE", "TEST_DEBUG"가 정상적으로 출력됩니다.

invalid_initial_cond_value_1.png




저 잘못된 초깃값의 문제는, Symbols 값을 편집할 때 발생합니다. 가령 다음과 같이 "TEST"를 추가하고,

invalid_initial_cond_value_2.png

프로젝트 설정을 저장 후 다시 빌드를 하면 이제는 출력 결과가 이렇게 나옵니다.

invalid_initial_cond_value_3.png

버그죠? 분명히 "TEST_TRACE"도 함께 나왔어야 합니다. 이렇게 나오는 이유를, 위의 화면에서 중간의 파란색 원 영역을 보면 나옵니다.

Debug - TRACETRACE;DEBUG;NET;NET6_0;NETCOREAPP
Release - TRACETRACE;RELEASE;NET;NET6_0;NETCOREAPP

뭐가 잘못인지 아시겠죠? ^^ 그렇습니다. "$(DefineConstants)"에는 이미 "TRACE"가 포함돼 있습니다. 문제는 마지막에 세미콜론을 포함하지 않았다는 것과, Visual Studio가 제공하는 기본값에는 다시 그것을 "TRACE"와 연결해서 제공한다는 점입니다.
그럼, 왜 처음부터 이것이 문제가 되지 않았을까요?

왜냐하면, 기본 상태에서는 비주얼 스튜디오가 기본값을 그렇게 보여줄 뿐 실제 빌드 프로세스에는 반영하지 않기 때문입니다. 하지만, 사용자가 편집을 한 순간부터 csproj에는 그것이 반영되고,

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DefineConstants>$(DefineConstants)TRACE;TEST</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DefineConstants>$(DefineConstants)TRACE;TEST</DefineConstants>
  </PropertyGroup>
</Project>

이후부터 빌드에 반영되기 때문에 빌드 결과에도 영향을 미치는 것입니다. 따라서 이 문제를 해결하려면 비주얼 스튜디오가 제공하는 기본값을 이런 식으로 바꾸면 됩니다.

// 세미콜론을 추가하거나,
$(DefineConstants);TRACE;TEST

// 어차피 TRACE를 포함하므로 지우거나,
$(DefineConstants);TEST

그럼 다시 정상적인 출력을 얻을 수 있습니다.

invalid_initial_cond_value_4.png




참고로, 이에 대한 이슈가 이미 있었습니다.

Can't remove "TRACE" from conditional compilation symbols
; https://developercommunity.visualstudio.com/t/Cant-remove-TRACE-from-conditional-co/1617120

제가 보기에는 문제를 충분히 잘 설명했는데도, 마이크로소프트의 "Luna Mi"라는 직원이 "without the additional information requested."라는 요구를 하면서 이슈를 "Closed" 시켜버렸습니다. ^^;

암튼, 그래서 좀 더 촘촘하게 설명을 해 이슈를 다시 열었는데,

Invalid initial "Conditional compilation symbols" values (Visual Studio 2022 17.2.6)
; https://developercommunity.visualstudio.com/t/Invalid-initial-Conditional-compilation/10102611

결과는 좀 지켜봐야겠습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/24/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  [94]  95  96  97  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11584정성태7/5/201818313Math: 35. GeoGebra 기하 (12) - 삼각형의 내심과 내접하는 원파일 다운로드1
11583정성태7/5/201818166.NET Framework: 785. public으로 노출되지 않은 다른 어셈블리의 delegate 인스턴스를 Reflection으로 생성하는 방법파일 다운로드1
11582정성태7/5/201824738.NET Framework: 784. C# - 제네릭 인자를 가진 타입을 생성하는 방법 [1]파일 다운로드1
11581정성태7/4/201821442Math: 34. GeoGebra 기하 (11) - 3대 작도 불능 문제의 하나인 임의 각의 3등분파일 다운로드1
11580정성태7/4/201818262Math: 33. GeoGebra 기하 (10) - 직각의 3등분파일 다운로드1
11579정성태7/4/201817294Math: 32. GeoGebra 기하 (9) - 임의의 선분을 한 변으로 갖는 정삼각형파일 다운로드1
11578정성태7/3/201817441Math: 31. GeoGebra 기하 (8) - 호(Arc)의 이등분파일 다운로드1
11577정성태7/3/201817418Math: 30. GeoGebra 기하 (7) - 각의 이등분파일 다운로드1
11576정성태7/3/201819600Math: 29. GeoGebra 기하 (6) - 대수의 4칙 연산파일 다운로드1
11575정성태7/2/201820035Math: 28. GeoGebra 기하 (5) - 선분을 n 등분하는 방법파일 다운로드1
11574정성태7/2/201818554Math: 27. GeoGebra 기하 (4) - 선분을 n 배 늘이는 방법파일 다운로드1
11573정성태7/2/201817886Math: 26. GeoGebra 기하 (3) - 평행선
11572정성태7/1/201817180.NET Framework: 783. C# 컴파일러가 허용하지 않는 (유효한) 코드를 컴파일해 테스트하는 방법
11571정성태7/1/201818654.NET Framework: 782. C# - JIRA에 등록된 Project의 Version 항목 추가하는 방법파일 다운로드1
11570정성태7/1/201818861Math: 25. GeoGebra 기하 (2) - 임의의 선분과 특정 점을 지나는 수직선파일 다운로드1
11569정성태7/1/201818067Math: 24. GeoGebra 기하 (1) - 수직 이등분선파일 다운로드1
11568정성태7/1/201830273Math: 23. GeoGebra 기하 - 컴퍼스와 자를 이용한 작도 프로그램 [1]
11567정성태6/28/201819589.NET Framework: 781. C# - OpenCvSharp 사용 시 포인터를 이용한 속도 향상파일 다운로드1
11566정성태6/28/201825246.NET Framework: 780. C# - JIRA REST API 사용 정리 (1) Basic 인증 [4]파일 다운로드1
11565정성태6/28/201822114.NET Framework: 779. C# 7.3에서 enum을 boxing 없이 int로 변환하기 - 세 번째 이야기파일 다운로드1
11564정성태6/27/201820595.NET Framework: 778. (Unity가 사용하는) 모노 런타임의 __makeref 오류
11563정성태6/27/201819410개발 환경 구성: 386. .NET Framework Native compiler 프리뷰 버전 사용법 [2]
11562정성태6/26/201818860개발 환경 구성: 385. 레지스트리에 등록된 원격지 스크립트 COM 객체 실행 방법
11561정성태6/26/201830151.NET Framework: 777. UI 요소의 접근은 반드시 그 UI를 만든 스레드에서! [8]파일 다운로드1
11560정성태6/25/201821472.NET Framework: 776. C# 7.3 - 초기화 식에서 변수 사용 가능(expression variables in initializers)파일 다운로드1
11559정성태6/25/201828650개발 환경 구성: 384. 영문 설정의 Windows 10 명령행 창(cmd.exe)의 한글 지원 [6]
... 91  92  93  [94]  95  96  97  98  99  100  101  102  103  104  105  ...