2016-08-30 10 views
0

コンソールアプリケーションを作成し、それを別のクラスライブラリプロジェクトに追加します。したがって、私のクラスライブラリは実行可能なアプリケーションになります。C#クラスライブラリを実行可能なアプリケーションにする

enter image description here

namespace MyWorker.Host 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

     } 
    } 

    public interface IConfiguration 
    { 
     void Configure(); 
    } 
} 

そして私はMyWorker.Clientクラスライブラリプロジェクトへの参照として私MyWorker.Hostを追加しています。そして、 "外部プログラムを開始"として設定されたデバッグ設定。

enter image description here

そして今、私はMyWorker.Hostを参照し、クライアントアセンブリを検索したいです。私はIConfigurationインターフェイスを実装したクラスを見つけるでしょう。

namespace MyWorker.Host 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var implementations = AppDomain 
       .CurrentDomain 
       .GetAssemblies() 
       .SelectMany(assemly => assemly.GetTypes()) 
       .Where(t => !t.IsInterface) 
       .Where(t => typeof (IConfiguration).IsAssignableFrom(t)); 

      foreach (var assembly in implementations) 
      { 
       Console.WriteLine(assembly.FullName); 
      } 

      Console.Read(); 
     } 
    } 
} 

しかし、コンソールには何もを書き込みません。

(私はMyWorker.Hostにconcrateクラスを追加する場合は、コンソールを書き込みます。)

+0

クラスライブラリを実行することはできません。それらは他の(実行可能な)アプリケーションによって消費されるだけです – Liam

+0

コンソールアプリケーションに参照を追加するつもりはありますか? 'References>右クリック> Add References> Projects> Solution'を選択し、' class library'を選択します。クラスライブラリにはエントリポイントがなく、 "実行可能"にはできません – user3185569

+0

もちろん、何も書きません。アセンブリMyWorker.Clientは、アプリケーションドメインにロードされていません。ロードする必要があります。実行可能な実行可能ファイルはまだあなたのためにDLLをロードする魔法のない 'MyWorker.Host'だけです - ビルドの依存関係をセットアップし、DLLをコピーし、必要に応じて明示的にロードする必要があります。 – Luaan

答えて

0

私は以前にも同様のことを行っていますが、リフレクションを使用して後にしているインターフェイスを実装するクラス用のDLLに目を通すために持っていました。もちろん、そのパスを渡す手段が必要です(設定可能な場合もあれば、ソリューションディレクトリのすべてのサブディレクトリを調べるなど)。

関連する問題