1 Ağustos 2018 Çarşamba

Assembly Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Reflection;
Assembly Arama
1. Sınıfımızın içinde bulunduğu Assembly'ye erişmek için şöyle yaparız.
Assembly theAssembly = this.GetType().Assembly;
2. Belli bir Assembly'i aramak için şöyle yaparız.
var theAssembly = (
    from Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()
    where (assembly.FullName == "TheNamespace.AssemblyName")
    select assembly
)
.FirstOrDefault();

if ( theAssembly!= null ){
  ...
}
3. Eğer belli bir tipi barındıran Assembly'i bulmak istersek şöyle yaparız.
foreach (Assembly theAssembly in AppDomain.CurrentDomain.GetAssemblies())
{
  Type theType = theAssembly.GetType(typeName);
  if (theType != null)
  {
    ...
  }
}
CodeBase Alanı
Assembly'nin bulunduğu dizini verir. Şöyle yaparız.
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
CreateInstance
Verilen tipten bir nesne yaratır.

EntryPoint
MethodInfo tipindendir. Dll ise bu alan null'dır. Exe ise doludur. Şöyle de yaparız.
var assembly = Assembly.Load(assemblyBuffer);
var entryPoint = assembly.EntryPoint;
var commandArgs = new string[0];
var returnValue = entryPoint.Invoke(null, new object[] { commandArgs });
GetCustomAttributes
Assembly'nin debug veya release olup olmadığını anlamak için şöyle yaparız.
Assembly assemb = Assembly.LoadFile(fileName);
bool isDebug = false;
foreach (object att in assemb.GetCustomAttributes(false))
    if (att is DebuggableAttribute)
        isDebug = ((DebuggableAttribute)att).IsJITTrackingEnabled;
Console.WriteLine("Assembly is {0}.", isDebug ? "debug" : "release");
GetExecutingAssembly
Yüklü olan exe'yi döndürür. Şöyle yaparız.
var assembly = Assembly.GetExecutingAssembly();
GetExportedTypes metodu
Şöyle yaparız
var types = assembly.GetExportedTypes();
GetManifestResourceStream
Bir Stream döndürür. Derlenmiş bir resource olduğu için stream salt okunurdur. Okunacak dosya "Embedded Resource" olarak derlenir.

Açılacak dosya için Projedeki yapı kullanılır. Tek fark olarak projedeki yolu nokta karakteri ile kullanırız. Şöyle yaparız.
Stream stream = assembly.GetManifestResourceStream("MyProj.resources.bg.bmp");
Şu yanlıştır.
Stream stream = assembly.GetManifestResourceStream("MyProj\\resources\\bg.bmp");
Stream'i metin olarak okumak için şöyle yaparız.
var resourceRegions = "SalesMap.Regions.txt";
var assembly = Assembly.GetExecutingAssembly();

using (Stream fileStream = assembly.GetManifestResourceStream(resourceRegions))
using (StreamReader reader = new StreamReader(fileStream))
{...}
GetName metodu
AssemblyName nesnesi döner.

GetReferencedAssemblies metodu
Şöyle yaparız.
Assembly assembly = ...;
var references = assembly.GetReferencedAssemblies();

foreach (var reference in references)
{
  var loadFileName = reference.Name + ".dll";
  ...
}
GetType metodu
Elimde şöyle bir arayüz olsun ve bu arayüz bir dll içinde olsun.
// the interface dll
namespace Mynamespace{
  public interface Interface1
  {
    int Add( int a, int b);
  }
}
Dll'i yükleyip şöyle erişirim.
// get the interface
var asm = Assembly.LoadFile( dllInterfacePath);
var type = asm.GetType("Mynamespace.Interface1");
GetTypes metodu
Belirtilen isim alanındaki tipleri almak için şöyle yaparız.
var theList = Assembly.GetExecutingAssembly().GetTypes()
                  .Where(t => t.Namespace == myNameSpace)
                  .ToList();
Location Alanı
Assembly'nin full path'ini döndürür. Uygulamanın çalıştığı dizin almak için şöyle yaparız.
string exeDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Assembly'nin satırlarını okumak için şöyle yaparız.
string assemblyPath = assembly.Location;
string s = File.ReadAllText(assemblyPath);
Load metodu
Şöyle yaparız.
string assemblyFullPath = ...;
var fileNameWithOutExtension = Path.GetFileNameWithoutExtension(assemblyFullPath);

var assembly = Assembly.Load(new AssemblyName(fileNameWithOutExtension));
LoadFrom metodu
Yeni bir Assembly yükler. Assembly dll veya exe olabilir. Şöyle yaparız.
string file = "foo.dll"; 
Assembly a = Assembly.LoadFrom (file);
LoadFile metodu
Şöyle yaparız.
Assembly a = Assembly.LoadFile("C:\path_to_your_exe\YourExe.exe");
ManifestModule Alanı
Şöyle yaparız. foo.exe gibi bir çıktı verir.
Assembly.GetExecutingAssembly().ManifestModule.Name;


Hiç yorum yok:

Yorum Gönder