Assembly.LoadFrom- 증거 과부하 사용을 위해 강력한 이름 서명을 확인합니다.

StackOverflow https://stackoverflow.com/questions/809934

  •  03-07-2019
  •  | 
  •  

문제

어셈블리가 강력하게 명명되도록 증거 매개 변수와 함께 오버로드에서 Assembly.Load를 사용할 수 있습니까? 어셈블리 이름, 문화, 버전 및 공개 키 토큰을 지정하고 싶습니다. 이 정보가 일치하지 않으면 어셈블리가로드되지 않아야합니다.

도움이 되었습니까?

해결책 3

나는 이것을하는 또 다른 방법을 찾았다.

var assemblyName = new AssemblyName(<fully qualified type name>);
assemblyName.CodeBase = <path to assembly>

Assembly.Load(assemblyName);

다른 팁

로드 한 후 어셈블리의 공개 키를 얻을 수 있습니다. 성공적으로로드하고 공개 키가 있으면 이름이 높습니다.

Assembly assembly = Assembly.LoadFrom (...);
byte[] pk = assembly.GetName().GetPublicKey();

더 나은 것은 어셈블리의 공개 키 및 버전 정보를 확인하십시오. ~ 전에 로드 :

AssemblyName an = AssemblyName.GetAssemblyName ("myfile.exe");
byte[] publicKey = an.GetPublicKey();
CultureInfo culture = an.CultureInfo;
Version version = an.Version;

getPublicKey ()가 널이 아닌 값을 반환 한 다음 어셈블리가 성공적으로로드되면 유효한 강한 이름이 있습니다.

패치 시스템에 대한 강력한 이름 확인을 중단하는 방법이 있습니다 .windows.forms.dll. 내가 그것을 사용한다면, 당신이 그것에 대해 할 수있는 일은 많지 않습니다. 내 속임수는 완전한 신뢰가 필요합니다.

내가 한 일은 DLL을 패치하고 패치 된 DLL을 배치하고 NGEN을 배포하고 로더를 패치하여 패치 된 NGEN 이미지를 원본 대신 픽업하는 것이 었습니다. 내가 할 수 있었던 것은 주식을 ngenened하는 것이 었습니다. (저는 실제로이 길을 테스트했으며 다른 사람의 소프트웨어를 잠재적으로 깨뜨리는 것이 좋지 않은 선택이라고 결정했습니다.)

나는 이것이 좋은 생각이라고 말하는 것이 아닙니다. Assembly.Load에서 서명을 확인하는 것은 나쁜 생각이라고 말합니다.

시도해보십시오 System.RefectionAsSemblynameflags 열거:

bool f_public_key = ((asm.GetName().Flags & AssemblyNameFlags.PublicKey) != 0);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top