2012-06-19 25 views
5

Bir derlemenin belirli bir sınıfa başvurup başvurmadığını belirlemek mümkün olup olmadığını merak ediyorum. Şu anda Meclisleri yüklemek için Yansıma kullanıyorum ve sonra Meclisleri ı yükleme am montaj içinden başvurulan ediliyor belirlemek: Ben o vReferencedAssembly içine kazmak isteyen Meclisleri başvurulan biliyorum o ŞimdiBir sınıf başvurulan olup olmadığını belirleme C#

foreach (var vReferencedAssembly in vSomeAssembly.GetReferencedAssemblies()) 

ve böyle bir şey olursa belirlemek:

File.Create(vSomeFile); 

basit ingilizce olarak, ben tehdit olarak neyi içerebilir bana verilen bir listeden bir Assembly yüklemek istemiyoruz. Bu yüzden dosyaları ve benzerlerini manipüle edebilecek şeyleri engellemek isteyebilirim.

+0

Bunun dinamik olması bir gereklilik midir? Statik olsaydı, başvurulan derlemeleri ve ne arayabileceğini görmek için disassembler'ı kullanabilirsiniz. – Josh

+0

Sanırım mümkünse dinamik olmasını tercih ederim. En iyi alternatif Disassembler'ı kullanmak olabilir. – Tada

cevap

2

Aradığınızı, derlemeleri yalnızca yansıma bağlamına yüklemek olduğuna inanıyorum. Bu, onları kontrol edene kadar hiçbir kodun yürütülmeyeceği güvenli bir alana yüklemenizi sağlar.

Bkz: http://msdn.microsoft.com/en-us/library/ms172331.aspx

Güncelleme: Sen türlerini dönmek değişkenler, özellikleri, parametrelerin, gibi şeyler bakmak için yansıma kullanabilir ama hala tamamen bir yöntem içinde bulunan yapan zararlı kod tespit yardımcı olmaz . Güvenli ve güvensiz kodları birbirinden ayıran en iyi şey sistem yöneticisine bırakılmış olmasıdır. Bu uygulamaların, bilgisayardaki güvenli bir yer (ler) ile örtülü bir güven ilişkisi vardır. IE: genel derleme önbelleği, geçerli çalışma dizini veya uygulamanız tarafından belirlenen bazı sabit yollar. PC daha sonra sadece yöneticilere derlemeleri bu konumda yönetme olanağı verir. Güncelleştirme 2: Bu potansiyel olarak güvenli olmayan kodu kendi uygulama etki alanında çalıştırmayı da düşünebilirsiniz. Burada neyin izin verildiğini ve neyin olmadığını belirleyebilirsiniz. Bkz http://msdn.microsoft.com/en-us/library/bb763046.aspx.

Güncelleştirme 3: Kendim için uygun izinler içeren kendi uygulama etki alanında güvenilir olmayan kodun yüklenmesini sürdürdüğümde en temiz yaklaşım, bu yöntemle çalışma zamanında bu question tarafından sorulduğu şekliyle dahili olarak başvuruda bulunmak mümkündür. Bunun özü, (MethodBody.GetILAsByteArray) yönteminin ham IL baytını elde etmek için yansıma kullanmak ve bunu, IL ayrıştırıcı seçiminizle analiz etmektir.

+0

Aradığım şeyin bu olup olmadığını anlayamıyorum. Belirli bir sınıfa başvurulup çağrılmadığını belirlemek için Meclisi nasıl denetlerim? Örneğin: mscorlib (mscorlib.dll) dosyasının File.Create içerdiğini biliyorum, ancak bu daha yeni yüklenmiş olan derlemeyi kastediyorum File.Create. Bunu nasıl belirleyebilirim? Hiç değilse .. – Tada

+0

Yansıma, metod parametrelerinde veya döndürmelerde kullanılan Sınıfları tanımlayabilir gibi görünse de, bir yöntemin gerçek gövdesinde başvurulansa, onu bulamazdım ... – Tada

İlgili konular