2013-06-03 9 views
9

Szukam sposobu, aby uzyskać zestawów obecnych aplikacji wewnątrz przenośnego projektu biblioteki.Czy istnieje alternatywa dla AppDomain.GetAssemblies w bibliotece przenośnej?

w klasycznej projektu biblioteki, linia kodu poniżej wykonać zadanie:

var assemblies = System.AppDomain.CurrentDomain.GetAssemblies(); 

Ale wydaje się, że System.AppDomain nie jest dostępna do przenośnej biblioteki.

Czy ktoś wie, w jaki sposób uzyskać bieżące zestawy domen w bibliotece przenośnej?

+0

Będziesz musiał pracować z tym, że jeśli klasa lub metoda nie jest dostępna w trybie PCL to jest * bardzo * mało prawdopodobne, że jest przenośny alternatywą. Aplikacja AppDomain nie jest dostępna na przykład w aplikacjach Silverlight i WinRT. Zapomniałeś wspomnieć o celach, które chcesz wspierać. Ale najwyraźniej nie możesz wykręcić wody z kamienia, jeśli cel, którego chcesz, nie obsługuje, to masz bibliotekę, która nie może działać. –

+1

Czy mogę zapytać, dlaczego w pierwszej kolejności należy pobrać listę wszystkich złożeń z bieżącego elementu AppDomain z poziomu języka PCL? –

+0

Czy możesz podać więcej informacji? Z tego, co widziałem, wyciąganie bieżących złożeń z bieżącego AppDomain powoduje założenie, że wszystkie złożenia w danej aplikacji zostały już załadowane. –

Odpowiedz

6

Można używać haków Platforma:

W swojej przenośnej biblioteki:

using System.Collections.Generic; 

namespace PCL { 
    public interface IAppDomain { 
    IList<IAssembly> GetAssemblies(); 
    } 

    public interface IAssembly { 
    string GetName(); 
    } 

    public class AppDomainWrapper { 
    public static IAppDomain Instance { get; set; } 
    } 
} 

i można z nich korzystać (w przenośnej biblioteki) jak:

AppDomainWrapper.Instance.GetAssemblies(); 

W swojej platformy systemowej zależna aplikacja, którą musisz wdrożyć:

public class AppDomainWrapperInstance : IAppDomain { 
    IList<IAssembly> GetAssemblies() { 
    var result = new List<IAssembly>(); 
    foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies()) { 
     result.Add(new AssemblyWrapper(assembly)); 
    } 
    return result; 
    } 
} 

public class AssemblyWrapper : IAssembly { 
    private Assembly m_Assembly; 
    public AssemblyWrapper(Assembly assembly) { 
    m_Assembly = assembly; 
    } 

    public string GetName() { 
    return m_Assembly.GetName().ToString(); 
    } 
} 

i bootstrap to

AppDomainWrapper.Instance = new AppDomainWrapperInstance(); 
+2

nie działa na UWP lub Xamarin :( – bbqchickenrobot

Powiązane problemy