3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】アプリ内の処理からdllを動的に読み込むサンプルコード【初心者向け】

Last updated at Posted at 2024-09-10

概要

ライブラリ内の処理から、指定されたパスの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\piyoC:\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や配列どちらでも渡せます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?