0

実行時にプラグイン ディレクトリから複数のアセンブリをロードしたいと考えています。コア アプリには事前にアセンブリへの参照がありません。アセンブリは、コア アプリによって指定されたインターフェイスを実装するため、それへの参照があります。2005 年の記事を見つけて、これを機能させるために何をする必要があるかを正確に説明しています

現在、私はこのコードを持っています。これは基本的に、上記の記事で見つけたものを LINQ 化したバージョンです。

foreach (
    IModule module in
        Directory.EnumerateDirectories(string.Format(@"{0}/{1}", Application.StartupPath, ModulePath))
            .Select(dir => Directory.GetFiles(dir, "*.dll"))
            .SelectMany(files => files.Select(Assembly.LoadFrom)
                                        .SelectMany(assembly => (from type in assembly.GetTypes()
                                                                where type.IsClass && !type.IsNotPublic
                                                                let interfaces = type.GetInterfaces()
                                                                where
                                                                    ((IList) interfaces).Contains(
                                                                        typeof (IModule))
                                                                select
                                                                    (IModule) Activator.CreateInstance(type))))
    )
{
    module.Core = this;
    module.Initialize();
    AddModule(module);
}

実行時にプラグイン/モジュール/アセンブリを動的にロードする現在の方法は何ですか?

4

3 に答える 3

3

Microsoft Managed Extensibility Frameworkも参照してください。このチュートリアルは、ちょっとした紹介です。

于 2013-04-09T07:24:30.417 に答える
0

Managed Extensibility Frameworkをお勧めします

または、参照を保持する必要のない「プラグイン」をロードする必要がある場合は、PRISMもあります。

于 2013-04-09T07:24:31.477 に答える
0

roslyn プロジェクトは役立つものを提供していませんか?

http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx

http://www.developerfusion.com/article/143896/understanding-the-basics-of-roslyn/

var scriptEngine = new ScriptEngine();
var session = Session.Create();
scriptEngine.Execute("foo.dll", session);
于 2013-04-09T07:25:21.457 に答える