概要
ライブラリ内の処理から、指定されたパスのdll群をまとめて読み込むサンプルコードをつくりました。
コード
/// <summary>
/// 指定したパスのdllを読み込む
/// </summary>
/// <param name="paths">dllのパスのコレクション (ファイル名もしくはフォルダ名を指定可能)</param>
private void LoadDlls(IReadOnlyCollection<string> paths)
{
if (paths == null) return;
foreach (string path in paths)
{
try
{
if (path.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) && File.Exists(path))
{
// dllファイルを読み込む
Assembly.LoadFrom(path);
}
else if (Directory.Exists(path))
{
// フォルダ配下のdllファイルを全て読み込む
var dllPaths = Directory.GetFiles(path, "*.dll");
foreach (string dllPath in dllPaths)
{
Assembly.LoadFrom(dllPath);
}
}
else
{
// 読込失敗のためログ出力
}
}
catch (Exception ex)
{
// エラー処理
// 処理は継続
continue;
}
}
}
使い方等
仕様
dllファイルもしくはdllファイルが格納されたフォルダまでの絶対パスをもとに、dllファイルを読み込む
引数
引数には下記のパスのコレクションが渡される
- dllファイルを指定する場合
- 「hoge.dll」「huga.dll」のように、拡張子「.dll」まで含んだ絶対パス
- フォルダを指定する場合
- 「piyo」のように、拡張子を含まずフォルダ名で終わる絶対パス
-
C:\Sample\piyo
やC:\Sample\piyo\
のように、パスの末尾の「\」有無はどちらでも可
その他
- Windowsではファイルの拡張子の小文字、大文字は区別されないため (ファイル・フォルダ名自体もだが) 、
StringComparison.OrdinalIgnoreCase
を指定し区別しない比較を行う
使い方のサンプルコード
var importDllPath = new String[3]
{
@"C:\Sample1\Hoge",
@"C:\Sample2\Fuga\Fuga.dll",
@"D:\Sample\piyo"
};
LoadDlls(importDllPath);
サンプルコードは記載するまでもないですが、本来は外部ファイル等にパスを定義しておき、プログラムで読み込んでからロードする形が良いと思います。IReadOnlyCollection
で受けているので、当たり前ですがListや配列どちらでも渡せます。