2013-06-03 7 views
9

Ich suche nach einer Möglichkeit, die Assemblies der aktuellen App in einem tragbaren Bibliotheksprojekt zu erhalten.Gibt es eine Alternative zu AppDomain.GetAssemblies auf der portablen Bibliothek?

Im klassischen Bibliotheksprojekt, die Codezeile unter dem Job:

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

aber scheint, dass System.AppDomain auf tragbare Bibliothek nicht zur Verfügung steht.

Kennt jemand einen Weg, um die aktuellen Domänen Assemblies auf tragbare Bibliothek zu bekommen?

+0

Sie brauchen mit der Tatsache zu arbeiten, dass, wenn eine Klasse oder Methode in PCL nicht verfügbar ist, dann ist es * sehr * unwahrscheinlich, dass es eine tragbare Alternative. AppDomain ist beispielsweise in Silverlight- und WinRT-Apps nicht verfügbar. Sie haben vergessen, die Ziele anzugeben, die Sie unterstützen möchten. Aber klar, du kannst kein Wasser aus dem Stein wringen, wenn das gewünschte Ziel es nicht unterstützt, dann hast du eine Bibliothek, die nicht funktionieren kann. –

+1

Darf ich fragen, warum Sie die Liste aller Assemblies in der aktuellen AppDomain von einem PCL an erster Stelle benötigen? –

+0

Können Sie weitere Informationen bereitstellen? Wenn ich die aktuelle Assembly aus der aktuellen AppDomain ziehe, nehme ich an, dass alle Assemblies in einer bestimmten Anwendung bereits geladen wurden. –

Antwort

6

können Sie Plattform Haken verwenden:

In Ihrem tragbaren Bibliothek:

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; } 
    } 
} 

und Sie können auf sie zugreifen (in Ihrem tragbaren Bibliothek) wie:

AppDomainWrapper.Instance.GetAssemblies(); 

In Ihrem plattform- abhängige Anwendung müssen Sie es implementieren:

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(); 
    } 
} 

und Bootstrap es

AppDomainWrapper.Instance = new AppDomainWrapperInstance(); 
+2

funktioniert nicht auf UWP oder Xamarin :( – bbqchickenrobot

Verwandte Themen