2013-02-16 19 views
16

を取得し、すべてのものはOKですし、私は私のアセンブリを取得しますが、t4ファイルへの書き込みは、私がいけないとき時にC#コード私は、これは私のコード反射がアセンブリ

var assembly=Assembly.GetExecutingAssembly(); 

var assemblies = assembly.GetTypes().Where(t => String.Equals(t.Namespace, "RepoLib.Rts.Web.Plugins.Profiler.Models", StringComparison.Ordinal)).ToArray(); 

ある特定のアセンブリ内のクラスのすべてを取得したいです何かエラーがありますが、私のアセンブリ数はです。

答えて

33

実行中のアセンブリはあなたのものではなく、T4エンジンのものです。

あなたのアセンブリから型にアクセスするには、次の手順を実行する必要があります。

  1. テンプレートにあなたのアセンブリへの参照を追加します。

    <#@ assembly name="$(SolutionDir)<Project>\bin\Debug\<Project>.dll" #> 
    
  2. アセンブリの名前空間をインポートします。 、このアセンブリ内の型にアクセスし、それらのいずれかを選択し、それからアセンブリを取得するには

    <#@ import namespace="<Project>.<Namespace>" #> 
    
  3. :前の行の下のどこかに入れて

    var assembly = typeof(<Type in assembly>).Assembly; 
    var types = assembly.GetTypes() 
            .Where(t => String.Equals(
             t.Namespace, 
             "RepoLib.Rts.Web.Plugins.Profiler.Models", 
             StringComparison.Ordinal)) 
            .ToArray(); 
    
+1

<アセンブリ内の型は何ですか>? –

+0

@ShahroozJefri:すべての型を取得したいアセンブリ内の任意の型。たとえば、 'RepoLib.Rts.Web.Plugins.Profiler.Models'ネームスペースの型の1つになる可能性があります –

+7

前処理済みのテンプレートを使用せず、同じプロジェクト内の型とクラスに関する情報を取得したい場合あなたのT4テンプレートが常駐しているので、私はReflectionの使用を勧めません。 T4テンプレートは設計時に変換されるため、$(SoutionDir) \ bin \ Debug \ .dllで参照されるアセンブリは、最後のビルドのものであり、古いものである可能性があります。 Visual Studioコードモデルを使用したい場合があります(http://stackoverflow.com/questions/14134016/design-time-reflection/14402269#14402269) – Nico