'da depolanan tüm özel verileri listele Bir hata oluştuğunda işlemlerin durumunu saklamak için, AppDomain'de (SetData) saklanan tüm (özel) verileri listelemek istiyorum. LocalStore özelliği özel ve AppDomain sınıfı devralınamaz. Bu verileri numaralandırmanın herhangi bir yolu var mı?AppDomain
8
A
cevap
5
AppDomain domain = AppDomain.CurrentDomain;
domain.SetData("testKey", "testValue");
FieldInfo[] fieldInfoArr = domain.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo fieldInfo in fieldInfoArr)
{
if (string.Compare(fieldInfo.Name, "_LocalStore", true) != 0)
continue;
Object value = fieldInfo.GetValue(domain);
if (!(value is Dictionary<string,object[]>))
return;
Dictionary<string, object[]> localStore = (Dictionary<string, object[]>)value;
foreach (var item in localStore)
{
Object[] values = (Object[])item.Value;
foreach (var val in values)
{
if (val == null)
continue;
Console.WriteLine(item.Key + " " + val.ToString());
}
}
}
+0
Güzel çözüm. Cevap için teşekkürler. –
2
Frank59's cevap ama biraz daha özlü dayanarak:
var appDomain = AppDomain.CurrentDomain;
var flags = BindingFlags.NonPublic | BindingFlags.Instance;
var fieldInfo = appDomain.GetType().GetField("_LocalStore", flags);
if (fieldInfo == null)
return;
var localStore = fieldInfo.GetValue(appDomain) as Dictionary<string, object[]>;
if (localStore == null)
return;
foreach (var key in localStore.Keys)
{
var nonNullValues = localStore[key].Where(v => v != null);
Console.WriteLine(key + ": " + string.Join(", ", nonNullValues));
}
1
aynı çözümü ancak bir F # uzantısı yöntemi olarak. Boş çeke ihtiyaç olmayabilir. https://gist.github.com/ctaggart/30555d3faf94b4d0ff98
type AppDomain with
member x.LocalStore
with get() =
let f = x.GetType().GetField("_LocalStore", BindingFlags.NonPublic ||| BindingFlags.Instance)
if f = null then Dictionary<string, obj[]>()
else f.GetValue x :?> Dictionary<string, obj[]>
let printAppDomainObjectCache() =
for KeyValue(k,v) in AppDomain.CurrentDomain.LocalStore do
printfn "%s" k
İlgili konular
- 1. Statik Alanlar AppDomain
- 2. AppDomain uygulamasında iş parçacığı oluşumunu engelle
- 3. AutoMapper Nasıl Yapılandırılır AppDomain Başına Bir Uygulama
- 4. Özel AppDomain oluştur ve ona derlemeler ekle
- 5. AppDomain beklemeyi bekle Görev önleme SerializationException
- 6. ASP.NET - AppDomain.CurrentDomain.GetAssemblies() - AppDomain yeniden başlatıldıktan sonra Assemblies eksik
- 7. COM, derleme yüklemesi için .NET AppDomain sınırlarına uyuyor mu?
- 8. AppDomain başına kaç tane app.config dosyasına sahip olursunuz?
- 9. İnce senkronizasyon sınıfları, AppDomain başına mı, yoksa Proses başına mı?
- 10. C# Dinamik Yükleme/Boşaltma DLL'leri Redux (tabii ki, AppDomain kullanarak)
- 11. Yeni AppDomain öğesinde yapılan ilk WCF bağlantısı çok yavaş
- 12. Eklenti erişimini, dosya sistemi ve ağ üzerinden appdomain üzerinden sınırla
- 13. C# - Ayrı AppDomain NET Meclisi Yükleme Sen Boşaltın Can So It
- 14. In .Net, bir AppDomain veya tüm işlemle sınırlı bir genel statik değişkenin 'Staticness' dir?
- 15. Başka bir AppDomain uygulamasında yakalanmamış bir istisnanın uygulamayı kapatmasını engelleyebilir miyim?
- 16. Silverlight yansıma ASP.NET, örneğin, biz sınıfta hakkında meta alabilir bir AppDomain içinde meclisleri yansıtmak veya türünü kullanarak olabilir ile
- 17. AppDomain.DoCallBack() i AppDomain.DoCallBack() ve jenerik türleri ile garip bir sorun var
- 18. Uygulamada AppDomain.CurrentDomain.BaseDirectory ve Application.ExecutablePath arasındaki fark nedir?
- 19. Diğer kullanıcının kimliğine bürünme yaparken felaket başarısızlığı
- 20. Tüm AppDomains'i mscoree olmadan numaralandır
- 21. SerializationException: Üye "..." için çözülmedi "0"
- 22. Süreç boyunca bir singleton nesnesi nasıl oluşturulur?
- 23. Bir IronPython motorunu ayrı bir AppDomain'de barındırmak nasıl?
- 24. ASP.NET içinde Nemerle kullanma App_Code dizini
- 25. CreateInstanceAndUnwrap ve Etki Alanı
- 26. Web dizini üzerinden ASP.NET gölge kopyasını dizinlere ekleyin
- 27. WCF İzleme hatası: Yapılandırma değerlendirme içeriği bulunamadı
- 28. Dotnet çekirdek yakalama kapatılması için yakın kapat
- 29. AppDomain.CreateInstance ve Activator.CreateInstance arasındaki fark nedir?
- 30. C# konsolu uygulamasında yakalanmamış istisnaların işlenmesi
neden sadece bu koleksiyondaki her anahtarın fro bazı koleksiyonunda ve sorgu GetData sonra (daha önce SetData ile ayarlanır) tüm tuşlar bilgi deposu değildir? – Tigran
Sürecin belirli bir uygulamayı kullanması gerekmediği bir çözüm arıyordum. Mümkün olduğunu düşünmüyorum, depolama anahtarları olan AppDomain için uzatma yöntemi geçti. Cevabınız için Tks. Başka bir ipucunuz varsa, çekinmeyin. –