DLL이 디버그 또는 릴리스 빌드인지 확인 방법 (.NET) [중복]
나는 시도하기 전에 확신하지만 Google과 SO 검색이 실패했습니다.
DLL이 릴리스 빌드인지 디버그 빌드인지 어떻게 할 수 있습니까?
수행하는 가장 좋은 방법은이를 수행 한 어셈블리 자체를 확인하는 것입니다. '.NET 어셈블리 정보'라는 발견이 매우 유용한 도구가 여기 로템 블룸으로는. 설치하면 .dll 파일과 연결되어 자체적으로 그래픽 적으로 설치됩니다. 설치 후 어셈블리를 두 번 클릭하여 열면 아래 스크린 샷에 있습니다.대로 어셈블리 세부 정보가 제공됩니다. 디버그 여부를 확인할 수 있습니다.
도움이 되셨기를 바랍니다 ..
IMHO, 위의 응용 프로그램은 실제로 오해의 소지가 있습니다. 코드가 최적화를 위해 JIT 최적화를 위해 제거하고 독립적 인 IsJITTrackingEnabled 만 찾습니다.
DebuggableAttribute는 릴리스 모드에서 선택하고 DebugOutput을 "none"이외의 값으로 선택하면 존재합니다.
또한 "디버그"와 "릴리스"의 의미를 정확히 정의해야합니다 .
앱이 코드 최적화로 구성 의미 의미? VS / JIT 디버거를 수있는 것이 뜻입니까? DebugOutput을 생성한다는 의미입니까? DEBUG 상수를 정의한다는 의미입니까? System.Diagnostics.Conditional () 특성을 사용하여 조건부로 방법을 사용할 수 있습니다.
IMHO, 누군가 어셈블리가 "디버그"인지 "릴리스"인지 여부 코드가 최적화되었는지 여부를 의미합니다.
Sooo, 수동으로 또는 프로그래밍 방식으로 수행 하시겠습니까?
수동 : 어셈블리의 메타 데이터에 대한 DebuggableAttribute 비트 마스크 값을 확인해야합니다. 방법은 다음과 가변합니다.
- ILDASM에서 어셈블리 열기
- 매니페스트 열기
- DebuggableAttribute 비트 마스크를 사용합니다. DebuggableAttribute가 확실히 최적화 된 어셈블리입니다.
- 존재하는 경우 4 개의 바이트를 사용합니다. '0'이면 JIT 최적화 된 것입니다. 그 밖의 것은 다음과 같습니다.
// 메타 데이터 버전 : v4.0.30319 .... // .custom instance void [mscorlib] System.Diagnostics.DebuggableAttribute ::. ctor (값 유형 [mscorlib] System.Diagnostics.DebuggableAttribute / DebuggingModes) = (01 00 02 00 00 00 00 00)
프로그래밍 방식 : 코드가 JITOptimized인지 프로그래밍 방식으로 알고 싶다고 가정하면 올바른 구현은 다음과 같습니다.
object[] attribs = ReflectedAssembly.GetCustomAttributes(typeof(DebuggableAttribute),
false);
// If the 'DebuggableAttribute' is not found then it is definitely an OPTIMIZED build
if (attribs.Length > 0)
{
// Just because the 'DebuggableAttribute' is found doesn't necessarily mean
// it's a DEBUG build; we have to check the JIT Optimization flag
// i.e. it could have the "generate PDB" checked but have JIT Optimization enabled
DebuggableAttribute debuggableAttribute = attribs[0] as DebuggableAttribute;
if (debuggableAttribute != null)
{
HasDebuggableAttribute = true;
IsJITOptimized = !debuggableAttribute.IsJITOptimizerDisabled;
BuildType = debuggableAttribute.IsJITOptimizerDisabled ? "Debug" : "Release";
// check for Debug Output "full" or "pdb-only"
DebugOutput = (debuggableAttribute.DebuggingFlags &
DebuggableAttribute.DebuggingModes.Default) !=
DebuggableAttribute.DebuggingModes.None
? "Full" : "pdb-only";
}
}
else
{
IsJITOptimized = true;
BuildType = "Release";
}
내 블로그 에서이 구현을 제공했습니다.
'IT' 카테고리의 다른 글
List 간 자유롭게 변환 (0) | 2020.08.16 |
---|---|
실행중인 BASH 펼쳐의 경로 확인 (0) | 2020.08.16 |
github에서 프로젝트를 어떻게 가져 옵니까? (0) | 2020.08.16 |
마지막 열을 제외하고 표 셀 너비를 최소로 설정하고 치수는? (0) | 2020.08.16 |
C #을 사용하여 Android 앱 개발 (0) | 2020.08.16 |