2012-07-21 3 views
1

저는 Cecil을 처음 접했고 간단한 테스트를 만들었습니다. 모든 네임 스페이스/유형의 이름이 임의의 문자열로 바뀝니다.어떤 유형/네임 스페이스의 이름을 변경하면 안됩니까?

var assembly = AssemblyDefinition.ReadAssembly(@"C:\somexe.exe"); 
foreach (var t in assembly.MainModule.Types) { 
    t.Namespace = Guid.NewGuid().ToString(); 
    t.Name = Guid.NewGuid().ToString();    
} 

실행 파일을 실행 한 후 빈 양식 (winforms)이 실행되면.

CLR이 이름을 신경 쓰지 않는다고 생각합니까? 내가 이름을 바꾸면 안되는게 뭐야? 아니면 뭔가 잘못하고 있는거야?

답변

2

특히 winforms에있는 많은 것들은 리플렉션에 의존합니다. 그리고 반성은 이름에 대해 매우 염려합니다. 이는 또한 자원 및 일치하지 않는 자원 파일과 관련 될 수 있습니다. 또한, 많은 속성이 유형 정보를 문자열로 포함 할 수 있으며, 이는 사물에 영향을 미칠 수 있습니다. 직렬화 가능 (특히 BinaryFormatter).

그러나 더 많은 컨텍스트 (주로 코드)가 없으면 우리는 추측 할 수 있습니다.

+0

나는 그것이 자원이라고 생각한다. 자원 이름은 namespace.class 이름과 일치해야합니다. 그러면 속성은 어떻습니까? 나는 그 (것)들을 개명하면 안된다? – blez

+0

@blez 사실, 나는 속성 내부의 값을 의미했다. TypeDescriptorAttribute 등과 같은 많은 것들은 타입 정보를 리터럴 문자열로 저장할 수 있습니다 (typeof를 통하는 대신에). 그 리터럴 문자열이 더 이상 이전 이름과 일치하지 않으면 ... –