Castle projesinin MonoRail‘i ile uğraşırken bir C# dosyası içinde geçen WebContainer türünden bir nesne problem çıkardı. Asıl derdim böyle bir tür yani böyle bir C# sınıfı (türü) olup olmadığını ve varsa hangi .dll dosyası içinde bulunduğunu anlamaktı. Bunun için tabii ilk akla gelen Lutz Roeder’in Reflector‘ını kullanmak olabilirdi ancak burada söz konusu olan tek bir .dll dosyasını (assembly’yi) detaylı ve grafik ortamda incelemek değil bir grup .dll dosyası üzerinden hızlıca arama yapabilmekti.
Bunun için .NET ve C#’ın “reflection” özelliklerinden faydalanarak belli bir dizin içindeki tüm .dll dosyalarını tarayan ve içlerindeki sınıf (tür) isimlerini listeleyen kısa bir program yazdım. (Programın pastebin.ca üzerindeki kaynak koduna buradan erişmek mümkün.)
Ardından Windows 2000 sistemime GNU Utilities for Win32‘yi kurdum (ve kurulum dizinin sistem “path” değişkenine ekledim). Böylece artık
D:Program FilesCastleBinnet-2.0 dizinine gidip
ClassExplorer . | grep -i web gibi bir komut çalıştırmak sureti ile tüm .dll dosyaları içinde küçük büyük harf ayrımı olmaksızın içinde “web” geçen tür isimlerini arayabiliyorum (72 tane .dll var, toplamları yaklaşık 7.5 MB ve arama sonuçlarının listelenmesi yaklaşık 3.5 – 4 saniye sürüyor).
Programın şu anda pek çok eksiği gediği var. Duruma ve ihtiyaçlara göre kolayca ekleme yapmak mümkün. Üçüncü parti yazılımların .dll dosyaları ile kaynak kodları içinde gezinmeden arama tarama yapmak için bu tür ve benzeri programlar faydalı olabilir.
Not: Şu anda çalışmayan komut satırından keyfi dizin verme işlevselliğini gerçekleştirmek ve dışsal grep bağımlılığı yerine dahili .NET düzenli ifade desteğinden faydalanmak iyi olabilir (yine de insan “tek bir işi iyi yapan programlardan oluşan bilgi işlem zinciri” şeklindeki UNIX mantalitesine alıştı mı bundan kolay kolay vazgeçmek istemiyor ;-))