0

抽象クラスを持つアプリケーションを作成しました。このクラスの実装をプラグインとしてサポートしたいと考えています。

これは抽象クラスです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;

namespace Stub.Logic {
    public abstract class Connection {
        …stuff
    }
}

これは実装です:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using Stub.Logic;

namespace MqConnection {
    public class MqConnection : Connection {
        …stuff
    }
}

プラグインは、読み取りとロードが行われるフォルダーにドロップされます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;

namespace Stub.Logic {
    public class PluginManager {
        private static List<Type> connectionTypes = new List<Type>();

        public static void LoadConnectionTypes(string path) {
            DirectoryInfo dllDirectory = new DirectoryInfo(path);
            FileInfo[] dlls = dllDirectory.GetFiles("*.dll");
                foreach (FileInfo dllFileInfo in dlls) {
                    try {
                        Assembly assembly = Assembly.LoadFrom(dllFileInfo.FullName);
                        connectionTypes.AddRange(**assembly.GetTypes()**);
                    } catch (Exception ex) {
                        if (ex is System.Reflection.ReflectionTypeLoadException) {
                        var typeLoadException = ex as ReflectionTypeLoadException;
                        var loaderExceptions = typeLoadException.LoaderExceptions;
                        TextWriter writer = new StreamWriter(@"C:\Users\yoav.benzvi\Desktop\error.txt");
                        writer.WriteLine(loaderExceptions[0].ToString());
                        writer.Close();
                    }
                }
            }
        }
    }
}

assembly.GetTypes() 呼び出しで失敗します。これは私が得ているエラーです:

System.IO.FileNotFoundException: ファイルまたはアセンブリ 'StubLogic、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名: 'StubLogic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'

プラグイン フォルダに StubLogic.dll が必要ですか? すでにアプリケーションの一部であるため冗長に思えますが、何が間違っているのでしょうか?

編集:参照プロパティの追加:
ここに画像の説明を入力

Edit2:すべてにお詫び申し上げます。コードは機能しています。問題は私の悪いテストにありました。繰り返しますが、ここで時間を無駄にしてしまった人にはお詫び申し上げます。

4

3 に答える 3

1

このコードをお勧めします

私はあなたのパスを変更しました

DirectoryInfo(Path.Combine(Environment.CurrentDirectory, "YourDirectoryRepository"));

そう

 DirectoryInfo dInfo = new DirectoryInfo(Path.Combine(Environment.CurrentDirectory, "YourDirectoryRepository"));
 FileInfo[] files = dInfo.GetFiles("*.dll");
 List<Assembly> plugInAssemblyList = new List<Assembly>();

 if (null != files)
 {
      foreach (FileInfo file in files)
      {
           plugInAssemblyList.Add(Assembly.LoadFrom(file.FullName));
      }
 }
于 2013-03-25T14:25:59.567 に答える
1

プラグインが、所有している StubLogic アセンブリと同じバージョンを参照していることを確認するか、プラグイン アセンブリ プロジェクトの StubLogic 参照に対して「特定のバージョンを使用する」が false であることを確認してください。

于 2013-03-25T14:20:18.517 に答える
0

すべてにお詫び申し上げます。コードは機能しています。問題は私の悪いテストにありました。繰り返しますが、ここで時間を無駄にしてしまった人にはお詫び申し上げます。

于 2013-03-25T14:47:22.710 に答える