是否有替代AppDomain的方法?可移植库上的GetAssemblies

本文关键字:可移植 GetAssemblies 方法 AppDomain 是否 | 更新日期: 2023-09-27 18:16:47

我正在寻找一种方法来获得当前应用程序的程序集内的可移植库项目。

在经典库项目中,下面的代码行完成工作:

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

但似乎系统。AppDomain不可用于便携式库。

有没有人知道一种方法来获得当前的领域程序集上的便携式库?

是否有替代AppDomain的方法?可移植库上的GetAssemblies

可以使用平台挂钩:

在您的便携式库中:

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

,您可以访问它们(在您的便携式库中),如:

AppDomainWrapper.Instance.GetAssemblies();

在依赖于平台的应用程序中,你需要实现它:

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

并引导它

AppDomainWrapper.Instance = new AppDomainWrapperInstance();