Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm looking for a way to get the current app's assemblies inside a portable library project.

In classic library project, the code line below do the job:

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

But seems that System.AppDomain is not available to portable library.

Does anyone know a way to get the current domain assemblies on portable library?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
367 views
Welcome To Ask or Share your Answers For Others

1 Answer

You can use platform hooks:

In your portable library:

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

and you can access them (in your portable library) like:

AppDomainWrapper.Instance.GetAssemblies();

In your platform-dependent application you'll need to implement it:

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

and bootstrap it

AppDomainWrapper.Instance = new AppDomainWrapperInstance();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...