2014-03-06 2 views
3

많은 어셈블리에서 GUID를 가져 오려고합니다.어셈블리 매니페스트 파일에서 어셈블리 GUID를 읽는 가장 빠른 방법

나는 리플렉터가 GUID를 읽는 것과 같은 방법을 선택했다. 그러나 지금까지는 매우 느린 과정이었다. 일부 (연결) DLL 파일이

Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) 
{ 
string missedAssemblyFullName = args.Name; 
Assembly assembly = Assembly.ReflectionOnlyLoad(missedAssemblyFullName); 
return assembly; 
} 

//... and code 
string exe = "test.exe"; 
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve +=CurrentDomain_ReflectionOnlyAssemblyResolve; 
Assembly assembly = null; 
if (assembly != null) 
{ 
assembly = Assembly.ReflectionOnlyLoadFrom(exe); 
if (assembly != null) 
{ 
var test = CustomAttributeData.GetCustomAttributes(assembly); 
foreach (var elem in test) 
{ 
if (elem.AttributeType.Name == "GuidAttribute") 
assemblyGuid = (string)elem.ConstructorArguments[0].Value; 
} 
} 
} 

를 누락하는 경우 또한, 나는이 GUID 읽기 과정을 빠르게 할 수있는 방법, 많은 예외를받을? 다른 방법이 있습니까? 그냥 manifest 파일을 열고 AssemblyInfo.cs 파일에서 사용할 수있는 동일한 GUID를 읽으려고합니다. [assembly : Guid ("98c11478-7295-4c10-a97f-4b6805df6191")

ReflectionOnlyLoad 메서드가 필요합니까?

답변

0

코드 Vijay Mukhi, who wrote his version of ILDASM (소스 코드 포함)을 확인할 수 있습니다. 그것은 마이크로 소프트의 ILDASM이하는 것처럼 어셈블리의 매니페스트를 파싱합니다. 그런 다음 필요한 기능으로 코드를 트리밍 할 수 있습니다.