Guest User

Untitled

a guest
Jul 23rd, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. WebClient webClient = new WebClient();
  2. byte[] assemblyBytes = webClient.DownloadData("https://mysite.com");
  3. var assembly = Assembly.Load(assemblyBytes);
  4. var types = assembly.DefinedTypes;
  5.  
  6. class myClass
  7. {
  8. public static int GetSum(int arg)
  9. {
  10. return arg;
  11. }
  12.  
  13. public static int GetNum(int arg)
  14. {
  15. return arg;
  16. }
  17.  
  18. public static int GetId(int arg)
  19. {
  20. return arg;
  21. }
  22. }
  23.  
  24. var type = assembly.GetType("Namespace.TypeName");
  25. var method = type.GetMethod("StaticMethod");
  26. var result = method.Invoke(null, new object[] { param1, param2 });
  27.  
  28. // интерфейс в вашей программе
  29. public interface IRemote
  30. {
  31. int DoSomething(string param1, int param2);
  32. }
  33.  
  34. // его реализация в скачиваемой длл, она должна иметь референс на вашу программу
  35. public class RemoteClass : IRemote
  36. {
  37. public int DoSomething(string param1, int param2)
  38. {
  39. Console.WriteLine(param1);
  40. }
  41. }
  42.  
  43. var type = assembly.GetType("Namespace.RemoteClass");
  44. var remote = (IRemote)Activator.CreateInstance(type);
  45. remote.DoSomething("qwerty", 100);
  46.  
  47. WebClient webClient = new WebClient();
  48. byte[] assemblyBytes = webClient.DownloadData("https://mysite.com");
  49. var assembly = Assembly.Load(assemblyBytes);
  50.  
  51. // получим тип (мы знаем его имя - myClass)
  52. Type type = assembly.GetType("myClass");
  53. // создадим экземпляр объекта заданного типа
  54. var obj = Activator.CreateInstance(type);
  55.  
  56. // вызовем метод из полученного экземпляра у заданного типа
  57. type.InvokeMember(
  58. "GetSum",
  59. BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod,
  60. null,
  61. obj,
  62. new Object[] {5}
  63. );
  64.  
  65. void Foo()
  66. {
  67. AppDomain.CurrentDomain.AssemblyResolve += ...;
  68. myClass.getId(0);
  69. }
  70.  
  71. void Foo()
  72. {
  73. AppDomain.CurrentDomain.AssemblyResolve += ...;
  74. Bar();
  75. }
  76.  
  77. void Bar()
  78. {
  79. myClass.getId(0);
  80. }
Add Comment
Please, Sign In to add comment