Mono Cecil을 사용하여 DLL을 조작하려고합니다. 내가 원하는 것은 클래스의 기본 유형을 System.MarshalByRefObject
에서 mscorlib.dll
으로 설정하는 것입니다. 다음 코드를 사용하고 있습니다.Mono Cecil을 사용하여 형식의 기본 클래스를 설정할 수 없습니다.
var assembly = AssemblyDefinition.ReadAssembly(inputtarget);
var types = assembly.MainModule.Types;
var myTypesToChange = types.Where(...).Select(t => t);
var baseType = AssemblyDefinition.ReadAssembly(@"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll").MainModule.Types.Where(t => t.Name.Contains("MarshalByRefObject")).Select(t => t).First();
foreach (var myType in myTypesToChange)
{
myType.BaseType = baseType;
}
assembly.Write(outputtarget);
출력에서 기본 유형이 설정되지 않았습니다!
기존 조립품에서 BaseType
을 TypeReference
으로 설정하면 올바르게 기본 유형이 설정됩니다.
나는 내가 할 것은 코드 프로젝트 기사 "Reweaving IL code with Mono.Cecil"에 대한 코멘트에 this reply에서 제안이 수행되는 방식과 매우 유사하다고 생각 :
"예, 당신이 어떤의 기본 유형을 다시 작성할 수 있습니다 클래스 : "
var assembly = AssemblyDefinition.ReadAssembly(AssemblyPath); var mainModule = assembly.MainModule; var companyType = mainModule.Types.First(t => t.Name == "Company"); var ownerType = mainModule.Types.First(t => t.Name == "Owner"); ownerType.BaseType = companyType; assembly.Write(AssemblyPath);
이 쉬워야한다! 내가 뭘 잘못하고 있니?
내가 관련 질문 벤이 요구하고 있다는 것을 깨닫게 : 나는 MarshalByRefObject를위한 TypeReference이 더 우아한 방식으로 추출 할 수 있다고 생각 http://stackoverflow.com/questions/22911825/how-do-i-change- - basetype-define-in-a-typedefinition? rq = 1 .. 제발 도와주세요 !!!! – simpleusr
귀하가 주장하는 바에 따라 이전에 동일한 질문이있는 경우, 귀하의 질문은 복제본이므로 닫아야합니다. – stakx