私は、さまざまな方法、つまり電子メール、ftp を使用してファイルを転送できる Windows サービスを作成しています。各ファイルまたはファイルセットには、独自の構成の詳細を含めることができます。
生成後に配信する必要があるすべてのファイルまたはファイルセットに対して、フォルダーにドロップできるアセンブリを作成すると、サービスは次のスケジュールされた実行でそれを取得します。このアセンブリは、ファイルまたはファイルセットの配信方法を定義する標準インターフェイスを利用します。これらのプラグイン アセンブリは、他の依存アセンブリ (プラグイン アセンブリをドロップする必要があるフォルダーにも含める必要がある外部 ftp ライブラリまたは電子メール ライブラリ) を参照する必要がある場合があります。
私の質問:プラグイン アセンブリが存在するフォルダー内の依存アセンブリを無視する方法はありますか? または、プラグイン アセンブリを 1 つのフォルダーに整理し、依存アセンブリを別々に整理する方法はありますか?
これは、サービスがアセンブリをループする私のコードです。現在、フォルダー内にあるすべてのものを使用し、おそらく例外をスローします。
foreach (var file in Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings["AssemblyStorage"])))
{
var assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType("ReflectionTest.Plugin");
if (type != null)
{
object obj = Activator.CreateInstance(type);
var resultFtp = type.InvokeMember("FTP", BindingFlags.Default | BindingFlags.InvokeMethod, null,obj, null);
var resultEmail = type.InvokeMember("Email",BindingFlags.Default | BindingFlags.InvokeMethod,null, obj, null);
Console.Write(resultFtp);
Console.Write(resultEmail);
obj = null;
}
assembly = null;
type = null;
}
プラグイン アセンブリ:コンパイルされたプラグイン dll は、最終的に上記のフォルダーに配置されます - (Path.Combine(AppDomain.CurrentDomain.BaseDirectory,ConfigurationManager.AppSettings["AssemblyStorage"])
. これらのプラグイン アセンブリ ファイルの名前は何でもかまいません。
namespace ReflectionTest
{
public class Plugin : ITransferService
{
public bool FTP()
{
return true;
}
public bool Email()
{
return true;
}
}
}