我想在运行时从我的插件目录加载几个程序集。核心应用程序事先没有对程序集的引用,程序集实现了核心应用程序给出的接口,因此引用了它。 I found and article from 2005 explaining exactly what I need to do to make this work。
目前我有这段代码,它基本上是你在上面文章中找到的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);
}
那么在运行时动态加载插件/模块/程序集的当前方法是什么?
答案 0 :(得分:3)
你可能想看看Microsoft Managed Extensibility Framework 这个Tutorial这个有点好的介绍。
答案 1 :(得分:0)
我建议Managed Extensibility Framework
或者,如果您需要加载“插件”而无需保留引用,还有PRISM
答案 2 :(得分: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);