Notas do estudo de atualização entre plataformas e atualizações quentes do Unity (1)

Em C #, o carregamento e descarregamento dinâmico da DLL é realizado através do domínio do programa.

Crie um programa de console em C #, a estrutura do projeto é a seguinte:

HotUpdate é um aplicativo de console, CommonLib e MoudleAdditive são duas bibliotecas de classes.

Código no CommonLib:

1  usando System;
2  
3  namespace CommonLib
 4  {
 5      interface pública  ICalculater
 6     {
 7 int Calculator ( int a, int b);
8     }
 9 }           

Código no MoudleAdditive:

1  usando CommonLib;
2  usando sistema;
3  
4  namespace MoudleAdditive
 5  {
 6      classe pública  MoudleAdditive: MarshalByRefObject, ICalculater
 7     {
 8 public int Calculador ( int a, int b)
 9         {
 10 int res = a + b;
11              Console.WriteLine ( " 结果 结果: " + res + " [Domínio Atual: "                         + AppDomain.CurrentDomain.FriendlyName + " ] " );
12              retorno res;
13          }
 14      }
 15 }

Código no HotUpdate:

1  usando CommonLib;
 2  usando System;
 3  usando System.IO;
 4  
5  namespace HotUpdate
 6  {
 7      class Program
 8      {
 9          static  void Main ( string [] args)
 10          {
 11              Console.WriteLine ( " Domínio Atual: " + AppDomain. CurrentDomain.FriendlyName + Environment.NewLine);
 12              Console.WriteLine ( " Digite dois números (a, b), resultado do cálculo: " );
13              Console.Write ( " a = " );
14              int a = Convert.ToInt32 (Console.ReadLine ());
15              Console.Write ( " b = " );
16              int b = Convert.ToInt32 (Console.ReadLine ());
17  
18              AppDomain addiveDomain = AppDomain.CreateDomain ( " Domain #Calculater " );
19              Calculador ICalculater = (ICalculater) aditivoDomain.CreateInstanceAndUnwrap ( " MoudleAdditive " , " MoudleAdditive.MoudleAdditive" );
 20              calculater.Calculater (a, b);
 21  
22              Console.WriteLine ( " Digite sair para sair, digite delete para excluir o AppDomain atual, insira recarregar para recarregar AppDomain " );
 23              comando de string ;
 24              while ((command = Console. ReadLine (). ToLower ())! = " Sair " )
 25              {
 26                  switch (comando)
 27                  {
 28                      case  " delete " :
 29                          TryDelete ( " MoudleAdditive.dll ");
30                          Console.WriteLine ();
31                          intervalos ;
32                      case  " unload " :
 33                          UnloadDomain (aditivoDomain);
34                          Console.WriteLine ();
35                          intervalos ;
36                      caso  " recarregar " :
 37                          AppDomain appDomain;
38                          if (ReloadDomain ( out appDomain))
 39                          {
 40                             ICalculater cal = (ICalculater) appDomain.CreateInstanceAndUnwrap ( " MoudleAdditive " , " MoudleAdditive.MoudleAdditive " );
41                              cal. Calculadora (a, b);
42                          }
 43                          Console.WriteLine ();
44                          intervalos ;
45                      padrão :
 46                          intervalos ;
47                  }
 48              }
 49  
50              Console.ReadKey ();
51          }
 52  
53         static  void TryDelete ( string filename)
 54          {
 55              try 
56              {
 57                  string fullName = AppDomain.CurrentDomain.BaseDirectory + filename;
 58                  File.Delete (fullName);
 59                  Console.WriteLine ( " Arquivo excluído com êxito: {0} " , fullName) ;
 60              }
 61              catch (Exceção e)
 62              {
 63                  Console.WriteLine ( "O arquivo de exclusão: {0} falhou, {1} " , nome do arquivo, e.Message);
64              }
 65          }
 66  
67          static  void UnloadDomain (AppDomain appDomain)
 68          {
 69              if ( null == appDomain) retorna ;
70              string appDomainName = appDomain.FriendlyName;
71              AppDomain.Unload (appDomain);
72              Console.WriteLine ( " 卸载 程序 域 {0} 成功! " , AppDomainName);
73          }
 74  
75          bool estático  ReloadDomain ( fora AppDomain appDomain)
76          {
 77              tente 
78              {
 79                  appDomain = AppDomain.CreateDomain ( " Domain #Calculater " );
80                  Console.WriteLine ( " Domínio recarregado, nome: Domínio #Calculater " );
81                  retornar  verdadeiro ;
82              }
 83              captura 
84              {
 85                  appDomain = null ;
86                  retornar  falso ;
87              }
 88          }
89      }
 90 }

Para obter princípios detalhados, consulte: https://www.cnblogs.com/Leo_wl/p/4255533.html

 

Acho que você gosta

Origin www.cnblogs.com/luguoshuai/p/12748215.html
Recomendado
Clasificación