Giriş
Şu satırı dahil ederiz.
BaseDirectory Alanı
Şyöle yaparız.
Yeni bir domain yaratır.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Uygulamanın çalıştığı dizini verir.
AssemblyBuilder nesnesi yaratır.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Domain bellekten silinmeden önce çağrılır.
Sanırım AppDomain nesnenin döngüsünü başlatıyor.
Örnek
Şöyle yaparız.
Şöyle yaparız.
FirstChanceException bir Microsoft kavramı. Diğer debugger geliştiricilerinde böyle bir kavram yok. FirstChanceException normalde debugger tarafından kullanılır. Exception uygulamaya verilmeden önce debugger'ı durdurup değişkenleri inceleme imkanı tanır.
Bazen kod içinde de işimize yaradığı durumlar olabilir.
Açıklaması şöyle
Id Alanı
Her AppDomain nesnesinin bir numarası var. İlk numara 1'den başlar.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
using System.AppDomain.CurrentDomain;
Her AppDomain için static metodlar yeniden çalıştırılır. Örneğin birden fazla python kodu çalıştırmak için kullanılabilir.BaseDirectory Alanı
Şyöle yaparız.
//i.e; D:\Projects\MyApp\API\)
string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
CreateDomainYeni bir domain yaratır.
Örnek
Şöyle yaparız.
AppDomain domain = AppDomain.CreateDomain("Domain");
ÖrnekŞöyle yaparız.
var friendlyName = "PlayerAppDomain";
var assembly = Assembly.GetExecutingAssembly();
var codeBase = assembly.Location;
var codeBaseDirectory = Path.GetDirectoryName(codeBase);
var info = new AppDomainSetup()
{
ApplicationName = "OurCompiledScript",
ApplicationBase = codeBaseDirectory,
DynamicBase = codeBaseDirectory,
};
AppDomain dom = AppDomain.CreateDomain(friendlyName,
new System.Security.Policy.Evidence(), info);
CreateInstanceAndUnwrap metoduŞöyle yaparız.
PluginLoader loader = (PluginLoader)domain.CreateInstanceAndUnwrap(
Assembly.GetExecutingAssembly().FullName, typeof(PluginLoader).FullName);
CurrentDomain AlanıŞöyle yaparız.
// Get the current application domain for the current thread
AppDomain currentDomain = AppDomain.CurrentDomain;
CurrentDomain. BaseDirectory AlanıUygulamanın çalıştığı dizini verir.
AppDomain.CurrentDomain.BaseDirectory
CurrentDomain. GetAssemblies metodu
Şimdiye kadar sadece yüklü DLL'leri dolaşmak için kullandım.AppDomain.CurrentDomain.GetAssemblies()
DefineDynamicAssembly metoduAssemblyBuilder nesnesi yaratır.
Örnek
Şöyle yaparız.
// Get the current application domain for the current thread
AppDomain currentDomain = AppDomain.CurrentDomain;
// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName name = new AssemblyName("MyEnums");
AssemblyBuilder assemblyBuilder = currentDomain.DefineDynamicAssembly(name,
AssemblyBuilderAccess.RunAndSave);
ÖrnekŞöyle yaparız.
var assmName = new AssemblyName("DynamicAssemblyExample");
var assmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assmName,
AssemblyBuilderAccess.RunAndSave);
DomainUnload eventiDomain bellekten silinmeden önce çağrılır.
AppDomain.CurrentDomain.DomainUnload += CleanupBeforeExit;
DoCallBack metoduSanırım AppDomain nesnenin döngüsünü başlatıyor.
Örnek
Şöyle yaparız.
AppDomain domain = AppDomain.CreateDomain("Domain");
domain.DoCallBack(() =>{...});
ÖrnekŞöyle yaparız.
AppDomain domain = AppDomain.CreateDomain("New Domain");
domain.DoCallBack(new CrossAppDomainDelegate(Launch));
Callback şöyledir.static void Launch()
{
Assembly s = Assembly.Load(File.ReadAllBytes(@"C:\my.dll"));
...
}
FirstChanceException eventiFirstChanceException bir Microsoft kavramı. Diğer debugger geliştiricilerinde böyle bir kavram yok. FirstChanceException normalde debugger tarafından kullanılır. Exception uygulamaya verilmeden önce debugger'ı durdurup değişkenleri inceleme imkanı tanır.
Bazen kod içinde de işimize yaradığı durumlar olabilir.
Açıklaması şöyle
Şöyle kodlarızOccurs when an exception is thrown in managed code, before the runtime searches the call stack for an exception handler in the application domain.
AppDomain.CurrentDomain.FirstChanceException +=
(object source, FirstChanceExceptionEventArgs e) =>
{
Console.WriteLine("FirstChanceException event raised in {0}: {1}",
AppDomain.CurrentDomain.FriendlyName, e.Exception.Message);
};
Unmanaged koda yapılan çağrıdaki exception da managed kod içinde exception'a döndürülür. İşte bu noktada da kullanılabilir.Id Alanı
Her AppDomain nesnesinin bir numarası var. İlk numara 1'den başlar.
AppDomain appDomain = ...; // AppDomain creation
...appDomain.Id;
Load metoduÖrnek
Şöyle yaparız.
Assembly a = ...;
AppDomain.CurrentDomain.Load (a.GetName());
ÖrnekŞöyle yaparız.
string dll = ...;
Assembly scriptAssembly = domain.Load(new AssemblyName(Path.GetFileName(dll)));
UnhandledException Event'iŞöyle yaparız.
appDomain.UnhandledException +=
new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{
try
{
Exception ex = (Exception)args.ExceptionObject;
...
}
finally { }
}
Unload metoduŞöyle yaparız.
AppDomain domain = ...;
AppDomain.Unload(dom);
Hiç yorum yok:
Yorum Gönder