
src/
└PinkOtter.IChing.Core -> 클래스 라이브러리 (dll)
└PinkOtter.IChing.Web -> ASP.NET Core 웹앱 (Razor Pages)
GPT 할매, Gemini 할매와 함께 셋이서 머리를 맞대고 구현해 나가려고 큰 결심(?)을 하기가 무색하게 첫 번째부터 이해가 되지 않았다.
일단 비주얼 스튜디오 자체가 낯선 나에게는 솔루션의 하위 개념으로 프로젝트를 생성한다는 것도 상당히 낯설었다.
그렇게 이리저리 헤매던 차에 백단 프로젝트 생성을 클래스 라이브러리로 만들라는 것. 이 의문에 대한 GPT 할매의 답변은 다음과 같다.
웹사이트(웹앱)도 결국은 DLL로 빌드된다.
니가 실행하는 “웹 프로젝트”도 내부적으로는 DLL이 만들어지고, 그 DLL을 dotnet 런타임이 실행시키는 거다.
그리고 클래스 라이브러리(DLL) 는 “웹이냐 아니냐”가 아니라,
그냥 재사용 가능한 코드 묶음(모듈) 이라고 생각하면 된다.
솔루션 탐색기 상단의 '모든 파일 표시' 를 누르면 빈 폴더 모양으로 뜰 것.
원하는 빈 폴더에 우클릭 하고 '프로젝트에 포함' 을 누르면 된다.

'C:\Users\LIHA\Desktop\pinkotter-iching\src\PinkOtter.IChing.Core\bin\Debug\PinkOtter.IChing.Core.dll' 메타데이터 파일을 찾을 수 없습니다.
라는 에러가 계속 뜨면서 빌드에 실패했다. 원인은 솔루션이 프로젝트를 불러오면서 무언가 참조가 꼬인 것으로 보인다.
시도해본 방법은 다음과 같다.
이 와중에 현재 솔루션에 알수없는 프로젝트 구성 매핑이 있다는 오류 메시지도 떠서 Debug 콤보박스의 구성 관리자를 들어가 보니, 프로젝트 목록에 Web만 있고 Core가 없었다.
아마 클래스 라이브러리인 Core의 xml 구성이 잘못된 것도 영향이 있을 것 같아 xml을 수정했다. 영향이 있는진 모르겠지만... 왠지 해결되었다.
Gemini 할매가 준 코드는 다음과 같다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>

이렇게 나오는거 보고 대체 뭐야? 싶었는데 원인은 저 줄의 위치 때문.
builder.Services. ~ 항목들은 var app = builder.Build(); 위에 위치해야 한다고.
그래서 위에 추가한 서비스들 준비 다 돼서 빌드하겠다는 얘기가 var app = builder.Build(); 라서, 그 뒤로는 read-only가 된다고 한다.