poincad — handoff (현재 상태·불변 핵심)
갱신일: 2026-06-11 (KST)
목적
poincad = VB.NET AutoCAD 플러그인. 이번 작업 줄기 = IX CAD 2023(imos OEM) 안에서 동작하는 "자체 가구 유닛 선택 브라우저" 개발. imos 기본 유닛 선택(iFurn/iXplorer)이 효율 낮아, 사내 로컬 DB 기반 유닛을 더 빠르게 검색·미리보기·배치하는 자체 UI를 IX CAD에 띄우는 것이 목표.
불변 핵심 — 환경 식별인자 (이번 IX CAD 작업)
- 대상 프로그램: IX CAD 2023 = imos AG의 AutoCAD 기반 가구 전용 프로그램. 실제 빌드 = imos CAD OEM 16.0(c02), 빌드일 Feb 20 2025.
- AutoCAD 엔진 버전: R20.1 / 내부버전 23.1(프로필 키) — 단, 실제 로드되는 커널 어셈블리 파일버전은 24.3.61.0.0 (아래 참조 함정 참고)
- 설치 경로:
C:\Program Files\imos AG\iX CAD 2023 - CAD 커널 DLL 폴더:
C:\Program Files\imos AG\iX CAD 2023\CAD-Kernel\—accoremgd.dll·acdbmgd.dll·acmgd.dll모두 v24.3.61.0.0 - 실행 프로필 레지스트리 키(TRUSTEDPATHS 등):
HKCU:\SOFTWARE\Autodesk\AutoCAD\R20.1\ACAD-F001:409\Profiles\<<Unnamed Profile>>\Variables - 설정값(초기):
SECURELOAD = 1,TRUSTEDPATHS = ;(비어 있음),TRUSTEDDOMAINS = *.autodesk.com 등 autodesk 도메인만 - INI:
C:\Users\poinpc\AppData\Roaming\imos AG\iX CAD 2023\config\IMOS.INI(Windows 사용자명 = poinpc) - 공식 API 어셈블리 발견: 설치폴더에
imos.Api.Base.dll·imos.Api.Calculation.dll·imos.Api.Catalog.dll·imos.Api.Configuration.dll·imos.Api.Feedback.dll— 전부 NotSigned(서명 없음). imos가 의도한 정식 확장 통로로 추정.
확정 진단 (검증됨)
- LISP 완전 차단: IX CAD 명령행에서
(load ...)등 모든 괄호식 평가 →LISP command is not available. OEM이 AutoLISP/Visual LISP 엔진을 비활성화(또는 모듈 제외).acvlisp/aclisp류 DLL 미발견 → LISP 우회 불가, .NET 경로가 정답. - SECURELOAD 명령도 차단 — 명령행에서 SECURELOAD 입력 불가. IX CAD 내부에서 보안변수 조정 불가 → 레지스트리 직접 조정만 가능.
- 서드파티 .NET NETLOAD 차단 원인 = SECURELOAD=1 + TRUSTEDPATHS 비어있음 (OEM 락 아님).
System.Security.SecurityException at ExtensionLoader.ProcessAssembly, Zone=MyComputer. imos 자사 DLL은 신뢰 경로/화이트리스트라 로드됨. - NETLOAD 명령 자체는 살아있음 — imos 자사
imosManager.PaletteWrapper24.dll등은 정상 로드. - 해결책 = TRUSTEDPATHS에 내 DLL 폴더 추가 (SECURELOAD=1 유지 = 전체 보안 안 낮춤, 폴더 1개만 신뢰). 적용 후 SecurityException 해소 확인됨.
현재 상태 (NOW)
- PoC 진행 중: 자체 .NET DLL이 IX CAD에서 로드·실행되는지 검증 단계.
- 테스트 프로젝트 = C# 클래스라이브러리, .NET Framework 4.8 / x64, 명령
IXNET(0,0에 "IXCAD .NET OK" 텍스트 생성하는 최소 동작). 소스 = 채티 제공03_IxCadTest_v2.cs(Application모호성은using AcadApp = ...ApplicationServices.Application별칭으로 해소). - TRUSTEDPATHS 추가 완료:
C:\ixcad_test\등록됨(레지스트리 확인TRUSTEDPATHS = [C:\ixcad_test\], SECURELOAD=1 유지). 백업·원복 스크립트(06a/06b) 보유. - 빌드 성공 후 NETLOAD 시 IX CAD 크래시(2회) → 원인 = 참조 버전 불일치. 빌드가 참조한 AutoCAD 어셈블리 = v23.1.0.0인데 IX CAD 실제 엔진 = v24.3.61.0.0. 버전 다른 어셈블리 로드 → 런타임 충돌·강제종료.
- 조치(직전): 참조 3개(AcMgd·AcDbMgd·AcCoreMgd)를
C:\Program Files\imos AG\iX CAD 2023\CAD-Kernel\의 24.3 버전으로 수동 교체 완료. 리빌드 → 참조 버전 24.3 확인 → 신뢰폴더에 원본명으로 복사 → IX CAD 재시작 → NETLOAD → IXNET 검증이 다음 차례(미완).
함정·학습 (재발방지)
- 파일명 변경 금지: 빌드된 .NET DLL 파일명을 사후 변경하면(
ixcad_test.dll→ixcadtest.dll등) 어셈블리 매니페스트 이름과 어긋나 NETLOAD는 되지만CommandClass/CommandMethod등록이 무시됨(→Unknown command). 원본 빌드명 그대로 사용. - 참조 어셈블리는 반드시 IX CAD 실제 커널(
CAD-Kernel\, 24.3)에서. 다른 AutoCAD/ObjectARX SDK 버전(23.1 등) 참조 시 로드 순간 IX CAD 크래시. 프로필 키의 R20.1/23.1과 파일버전 24.3이 다르다는 점 주의. - IX CAD 2023은 참조 DLL 3개 필요:
AcMgd.dll·AcDbMgd.dll+AcCoreMgd.dll(Application클래스가 AcCoreMgd로 분리됨). 2개만 참조 시CommandMethod·Document·Application타입 미발견 컴파일 에러. - PowerShell .ps1 한글 주석 인코딩 함정: 채티가 UTF-8로 만든 .ps1을 페페 환경 PowerShell이 다른 인코딩으로 읽어 한글 주석이 깨지며
if/else블록 붕괴 →예기치 않은 '}' 토큰파스에러. → 명령을 PowerShell 창에 직접 붙여넣기(파일 경유 회피) 또는 ASCII-only 스크립트 사용. - TRUSTEDPATHS는 폴더 단위: 파일명 무관, 신뢰 "폴더" 안에 있으면 됨. 신뢰폴더엔 본인 DLL만·타인 쓰기 불가한 위치로.
- 빌드 산출물 검사(읽기전용)로 명령 포함 확인:
[Reflection.Assembly]::LoadFile(dll)→GetTypes().GetMethods()중CommandMethodAttribute보유 메서드 열거. 비면 빌드가 옛 소스이거나 소스가 프로젝트 미포함.
공식 채널 (정공법 경로)
- imos.Api = imos 정식 확장 API(Catalog=유닛 조회·Configuration·Calculation 등). 유닛 브라우저의 정답 루트로 유력. 단 정식 로드 경로·문서는 iX Support Center 로그인 영역(support.imos3d.com) 안에 있을 가능성. 페페 = 유지보수 계약/공식 지원 계정·파트너 접근 가능.
- iX Connect = iX Organizer 통합 컴포넌트, 외부 서비스(클라우드) 연동 정식 통로. 사내 로컬 DB엔 과할 수 있음.
- OEM 배포 = 파트너(기계 벤더·인증 파트너 in3D 등) 경유라 서드파티 주입이 의도적으로 잠김. 정식 확장은 imos.Api/iX Connect로.
- 권장 다음 행동: imos 공식 지원(또는 파트너)에 ① imos.Api 개발자 문서·예제(Catalog/Configuration) ② OEM에서 서드파티 .NET 정식 로드법(NETLOAD SecurityException 해결) ③ 사내 유닛 DB 외부 조회 공식 스키마/API 문의. 채티가 이메일 초안 2종(기술 핵심형·파트너 경유형) 작성해 둠.
다음
- (즉시) 24.3 참조로 리빌드한 DLL을 원본명 그대로 신뢰폴더 배치 → IX CAD 재시작 → NETLOAD → IXNET 동작 확인(0,0 텍스트 생성·SecurityException/크래시 없음). PoC 완료 판정.
- PoC 성공 시 → imos.Api(Catalog/Configuration) 메서드 분석(설치폴더
imos.Api*.xml문서파일 또는 reflection) → 사내 유닛 DB 조회·배치 가능 여부 확정 → 자체 유닛 브라우저 설계 시작. - 병행: imos 공식 지원/파트너에 정식 확장 경로 문의(이메일 초안 보유).
미확정 / 확인 못 한 것
- imos.Api가 실제로 유닛 조회·도면 배치를 노출하는지 — XML 명세/공식 문서로만 확정 가능(미확인).
- TRUSTEDPATHS 적용 후 24.3 참조 DLL의 실제 IXNET 동작 — 리빌드·재로드 후 검증 필요(미완).
- 사내 유닛 DB 스키마·접근 방식 — 미조사.
작업 파일 (채티 산출, /mnt outputs)
01_diag.lsp·02_hello.lsp(LISP 진단·차단 확인됨, 폐기 가능) /03_IxCadTest_v2.cs(.NET 최소 테스트 소스) /04_diag_external.ps1·04b_diag_fast.ps1(보안설정 외부 진단) /05_imos_api_probe.ps1(imos.Api 구성 조사) /06a_trustedpaths_add.ps1·06b_trustedpaths_restore.ps1(신뢰경로 추가·원복) /README_PoC절차.md(전체 절차).위 스크립트는 PoC용 로컬 산출. user_brief 리포로 복사하지 않음(필요 시 poincad 리포 또는 별도 보관).