외부 DLL 노드 정확도 개선 (엔진/프레임워크 노이즈 제거)
- 외부 DLL 은 '실제 존재 + 저장소(scanBase) 내부' 인 경우만 노드화 → $(OdaBinDir) 등 매크로 HintPath(TD_Mgd_$(ODAVER))·프레임워크/GAC DLL 제외 - 이름이 내부 프로젝트와 일치(버전 모호 포함)하면 외부 DLL 로 취급하지 않음 → Pet.Data_22.12_16 오분류 방지 검증: ZOO(제품뷰 config)=68노드 엔진 미포함, BoxZainer=188노드 유지(phantom 0) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
@@ -259,12 +259,15 @@ public static class DsmEngine
|
||||
foreach (Match m in reRefBlock.Matches(txt))
|
||||
{
|
||||
var inc = m.Groups[1].Value.Split(',')[0].Trim();
|
||||
bool internalMatch = byExact.ContainsKey(inc) || (byNorm.TryGetValue(Norm(inc), out var nm2) && nm2.Count == 1);
|
||||
if (internalMatch) continue;
|
||||
// 내부 프로젝트명과 일치(버전 모호 포함)하면 외부 DLL 로 보지 않음
|
||||
if (byExact.ContainsKey(inc) || byNorm.ContainsKey(Norm(inc))) continue;
|
||||
var hint = reHint.Match(m.Groups[2].Value);
|
||||
if (!hint.Success) continue;
|
||||
string hp; try { hp = Path.GetFullPath(Path.Combine(dir, hint.Groups[1].Value.Replace('\\', '/'))); } catch { continue; }
|
||||
if (Excluded(hp) || !hp.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) continue;
|
||||
// 실제 존재 + 저장소(scanBase) 내부의 DLL 만 노드화
|
||||
// → 매크로 경로($(OdaBinDir) 등)·프레임워크/GAC DLL 은 제외
|
||||
if (!hp.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) continue;
|
||||
if (Excluded(hp) || !File.Exists(hp) || !hp.StartsWith(scanBase, StringComparison.OrdinalIgnoreCase)) continue;
|
||||
var en = RegisterExtDll(inc);
|
||||
if (en != src) edges[src].Add(en);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user