2013-06-03 12 views
9

私は現在のアプリケーションのアセンブリをポータブルライブラリプロジェクトの中に入れる方法を探しています。古典的なライブラリプロジェクトでポータブルライブラリにAppDomain.GetAssembliesの代替手段がありますか?

、以下のコード行は、ジョブを実行します。

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

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

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

+0

​​。 AppDomainはSilverlightやWinRTのアプリケーションでは利用できません。あなたは、サポートしたいターゲットについて言及するのを忘れてしまいました。しかし、あなたが望む目標がそれをサポートしていない場合、あなたは働くことができない図書館を持っているならば、明らかにあなたは石から水をぬぐうことはできません。 –

+1

まず、現在のAppDomainのすべてのアセンブリの一覧をPCLから取得する必要があるのはなぜですか? –

+0

詳細情報を提供できますか?私が見てきた使用法から、現在のAppDomainから現在のアセンブリを引き出すことは、特定のアプリケーションのすべてのアセンブリが既に読み込まれていることを前提にしています。 –

答えて

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

とブートストラップそれ

あなたはクラスやメソッドがPCLで利用できない場合、移植の代替があること*そう非常に*であるという事実で作業する必要があります
+2

はUWPで動作しません。 Xamarin :( – bbqchickenrobot

関連する問題