Есть ли альтернатива AppDomain.GetAssemblies в переносимой библиотеке?

Я ищу способ получить сборки текущего приложения внутри проекта переносимой библиотеки.

В классическом библиотечном проекте строка кода ниже делает свою работу:

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

Но похоже, что System.AppDomain недоступен для переносимой библиотеки.

Кто-нибудь знает способ получить текущие доменные сборки в переносимой библиотеке?

1 ответ

Вы можете использовать крючки платформы:

В вашей портативной библиотеке:

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();
Другие вопросы по тегам