2011-02-28 4 views
1

문자열 리터럴이 모두 어셈블리의 매니페스트 (사용자 문자열 토큰) 아래에 문서화 된 이유가 궁금합니다.어셈블리의 매니페스트에서 모든 문자열 리터럴을 문서화하는 이유는 무엇입니까?

그것은 문자열 리터럴이 C# 코드 즉, 직접 CIL도 있음을 고려, 약간 중복 보인다

:

public void PrintMessage() 
{ 
    string myMessage = "Hello."; 
    Console.WriteLine(myMessage); 
} 

이 CIL

. method public hidebysig instance void PrintMessage() cil managed 
{ 
    .maxstack 1 
    // Define a local string variable (at index 0). 
    .locals init ([0] string myMessage) 
    // Load a string on to the stack with the value "Hello." 
    ldstr " Hello. " 
    // Store string value on the stack in the local variable. 
    stloc. 0 
    // Load the value at index 0. 
    ldloc. 0 
    // Call method with current value. 
    call void [mscorlib]System.Console: :WriteLine(string) 
    ret 
} 

문자 그대로 그 캐릭터도 의지로 컴파일 (ildasm을 통해 볼 수있다) :

**User Strings** 
------------------------------------------------------- 
70000001 : (11) L"Hello." 

그럼 왜 두 위치에서 문자열 리터럴입니까? 어떤 목적을 위해 봉사합니까?

P.S. 이 코드는 모두 Pro C# 2008 및 .NET 플랫폼에 대한 것입니다.

답변

4

글쎄, 당신은 두 번을보고있는 -하지만 난 ldstr 명령은 단지 문자열 테이블에서 문자열을 참조 것으로 기대한다. 그것은 단지 "사용자 문자열 7"등등을 말하는 것이 지루할 것이므로 ildasm에 표시됩니다.

4

IL을 표시하는 데 사용하는 도구가 자동으로 문자열을 확인하고 해당 문자열을 표시한다고 가정합니다.

관련 문제