10

ポータブル ライブラリ プロジェクト内で現在のアプリのアセンブリを取得する方法を探しています。

従来のライブラリ プロジェクトでは、以下のコード行がその役割を果たします。

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

しかし、 System.AppDomain はポータブル ライブラリでは利用できないようです。

ポータブル ライブラリで現在のドメイン アセンブリを取得する方法を知っている人はいますか?

4

1 に答える 1

6

プラットフォーム フックを使用できます。

ポータブル ライブラリで:

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();
于 2013-12-05T14:56:55.463 に答える