コンソールアプリケーションを作成し、それを別のクラスライブラリプロジェクトに追加します。したがって、私のクラスライブラリは実行可能なアプリケーションになります。C#クラスライブラリを実行可能なアプリケーションにする
namespace MyWorker.Host
{
class Program
{
static void Main(string[] args)
{
}
}
public interface IConfiguration
{
void Configure();
}
}
そして私はMyWorker.Client
クラスライブラリプロジェクトへの参照として私MyWorker.Host
を追加しています。そして、 "外部プログラムを開始"として設定されたデバッグ設定。
そして今、私は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クラスを追加する場合は、コンソールを書き込みます。)
クラスライブラリを実行することはできません。それらは他の(実行可能な)アプリケーションによって消費されるだけです – Liam
コンソールアプリケーションに参照を追加するつもりはありますか? 'References>右クリック> Add References> Projects> Solution'を選択し、' class library'を選択します。クラスライブラリにはエントリポイントがなく、 "実行可能"にはできません – user3185569
もちろん、何も書きません。アセンブリMyWorker.Clientは、アプリケーションドメインにロードされていません。ロードする必要があります。実行可能な実行可能ファイルはまだあなたのためにDLLをロードする魔法のない 'MyWorker.Host'だけです - ビルドの依存関係をセットアップし、DLLをコピーし、必要に応じて明示的にロードする必要があります。 – Luaan