문자열 리터럴이 모두 어셈블리의 매니페스트 (사용자 문자열 토큰) 아래에 문서화 된 이유가 궁금합니다.어셈블리의 매니페스트에서 모든 문자열 리터럴을 문서화하는 이유는 무엇입니까?
그것은 문자열 리터럴이 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 플랫폼에 대한 것입니다.