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();
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. –
Darf ich fragen, warum Sie die Liste aller Assemblies in der aktuellen AppDomain von einem PCL an erster Stelle benötigen? –
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. –