Giriş
Şu satırı dahil ederiz.
1. Sınıfımızın içinde bulunduğu Assembly'ye erişmek için şöyle yaparız.
Assembly'nin bulunduğu dizini verir. Şöyle yaparız.
Verilen tipten bir nesne yaratır.
EntryPoint
MethodInfo tipindendir. Dll ise bu alan null'dır. Exe ise doludur. Şöyle de yaparız.
Şöyle yaparız
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.
AssemblyName nesnesi döner.
GetReferencedAssemblies metodu
Şöyle yaparız.
Elimde şöyle bir arayüz olsun ve bu arayüz bir dll içinde olsun.
Belirtilen isim alanındaki tipleri almak için şöyle yaparız.
Assembly'nin full path'ini döndürür. Uygulamanın çalıştığı dizin almak için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız. foo.exe gibi bir çıktı verir.
Şu satırı dahil ederiz.
using System.Reflection;
Assembly Arama1. 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);
CreateInstanceVerilen 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.
Yüklü olan exe'yi döndürür. Şöyle yaparız.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");
GetExecutingAssemblyvar assembly = Assembly.GetExecutingAssembly();
GetExportedTypes metoduŞöyle yaparız
var types = assembly.GetExportedTypes();
GetManifestResourceStreamBir 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 metoduAssemblyName 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 metoduElimde şö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 metoduBelirtilen 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