Ev sahibi üzerinde eklenti DLL'lerini bulması gereken bir programım var.Belirli bir arabirime sahip .NET derlemeleri için DLL'leri tarama - bazı DLL'ler R6034'ü atar!
Bu, tüm DLL'leri bir (oldukça büyük) yol içinde numaralandırarak yapar. Bu yol, yerel DLL'ler de dahil olmak üzere pek çok şey içerir.
foreach (var f in Directory.EnumerateFiles(@"c:\Program Files", "*.dll", SearchOption.AllDirectories))
{
try
{
var assembly = Assembly.LoadFile(f);
var types = assembly.GetTypes();
foreach (var type in types)
{
if (type.GetInterface("My.IInterface") != null)
{
plugins.Add(f);
break;
}
}
assembly = null;
}
catch (Exception e)
{
}
}
benim tarayıcı (örneğin, msvcm80.dll) MS çalışma zamanı DLL Bir uncatchable çalışma zamanı hatası R6034 olsun vurursa: "Bir uygulama yanlış C çalışma zamanı kitaplığı yükleme denemesi yaptı" Bu pencere, programın yürütülmesini engeller. Bu DLL istemiyorum (belli ki); Bu durumdan zarif bir hata elde etmenin bir yolu var mı?
[İlgili q: Bu DLL anda işlem alanına yüklenen değilse bir DLL bir .NET düzeneği olup olmadığını belirlemek için (örneğin, non-istisna) etkili bir yolu yoktur]
ReflectionOnlyLoadFrom üzerinde ilginç. Çok kötü, yalnızca belirli bir adın bir derlemesini appdomain'e yüklemekle aynı sınırlamalara sahiptir. Alternatif bir uygulama alanı kullanmak görünüşte olağanüstü derecede acı verici; Başka bir appdomain'i nasıl alacağımı, başarıyla yüklemeleri (belirli türleri dikte etmeden) ve daha sonra bu meclislerin özelliklerini sorgulayan birini bulamadım. Bleah. – Joe