C#关于插件的问题!

yb199478 2011-10-09 05:40:07

private void ToolStripMenuItem_Plugin_Click(object sender, EventArgs e)
{
ToolStripMenuItem mi = (ToolStripMenuItem)sender;
string asmFile=null;
System.Reflection.Assembly assembly = null;
//MessageBox.Show(mi.Text);
try
{
foreach (KeyValuePair<string, string> val in this.pluginName)
{
if (val.Key == mi.Text)
{
asmFile = val.Value;
break;
}
}
if (asmFile != string.Empty)
{
assembly = System.Reflection.Assembly.LoadFrom(asmFile);
foreach (Type type in assembly.GetTypes())
{
if (!type.IsClass || type.IsNotPublic) continue;
Type[] tempInterfaces = type.GetInterfaces();
if (((IList)tempInterfaces).Contains(typeof(PluginInterface.Plugin)))
{
PluginInterface.Plugin plugin = (PluginInterface.Plugin)System.Activator.CreateInstance(type);
MessageBox.Show(plugin.GetPluginName());
}
}

}
}
catch
{
Messages.Instance().Msgbox("异常!");
}
}

程序会识别出插件文件夹中的插件并根据名字动态增加ToolStripMenuItem
但是,只要在程序中点击调用插件会发现,第一次点击插件插件可以被调用,也正常调用,但是再调用其他插件时就总是会调用第一次调用的插件。
在这里设置断点可以发现:
断点位置:assembly = System.Reflection.Assembly.LoadFrom(asmFile);
发现:assembly.CodeBase属性为第一次调用插件的位置。(无论调用其他什么插件,这个属性就是第一次调用的插件的位置)
但是asmFile变量中的值确是当前插件的位置
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lexiaoyao20 2011-10-09
  • 打赏
  • 举报
回复
LoadFile和LoadFrom不都差不多么。。。
呔妖怪来嘛 2011-10-09
  • 打赏
  • 举报
回复
wq664646973 2011-10-09
  • 打赏
  • 举报
回复
呵呵。。我来了。。
yb199478 2011-10-09
  • 打赏
  • 举报
回复
坑爹了,原来是我不小心打错了,打成LoadFrom了,来个人送分了。。。我的40分啊T。T
assembly = System.Reflection.Assembly.LoadFile(asmFile);
yb199478 2011-10-09
  • 打赏
  • 举报
回复
补充:每次这个问题,都要关闭程序重新打开后才能恢复调用正常,但是只要调用一次插件后,不管调用其他什么插件都不行了,都是自动调用了第一次的插件。用断点来看插件文件的存放位置是没有错的。但是不知道为什么总是调用第一次调用的插件
[14本经典Android开发教程]-3-Android SDK 中文开发文档 什么是 Android? Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta版的 Android SDK 提供了在Android 平台上使用JaVa语言进行Android应用开发必须的工具和API接口。 特性 · 应用程序框架 支持组件的重用与替换 · Dalvik 虚拟机 专为移动设备优化 · 集成的浏览器 基于开源的WebKit 引擎 · 优化的图形库 包括定制的2D图形库,3D图形库基于OpenGL ES 1.0 (硬件加速可选) · SQLite 用作结构化的数据存储 · 多媒体支持 包括常见的音频、视频和静态图像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) · GSM 电话技术 (依赖于硬件) · 蓝牙Bluetooth, EDGE, 3G, 和 WiFi (依赖于硬件) · 照相机,GPS,指南针,和加速度计(accelerometer) (依赖于硬件) · 丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件 Android 架构 下图显示的是Android操作系统的主要组件。每一部分将会在下面具体描述。 已上传2本: [14本经典Android开发教程]-1-Android开发从入门到精通http://download.csdn.net/detail/cleopard/8355245 [14本经典Android开发教程]-2-Android开发手册—API函数详解 http://download.csdn.net/detail/cleopard/8374487 剩余11本稍后上传!@或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] http://download.csdn.net/album/detail/957 C#资料合辑一[C#入门篇] http://download.csdn.net/album/detail/669 [Csharp高级编程(第6版)](共8压缩卷) http://download.csdn.net/album/detail/667 10个[精品资源]Java学习资料合辑[一] http://download.csdn.net/album/detail/663 10个C#Socket编程代码示例 http://download.csdn.net/album/detail/631 6份GDI+程序设计资源整合[全零分] http://download.csdn.net/album/detail/625 2014年移动游戏行业数据分析 http://download.csdn.net/detail/cleopard/8340331 一文读懂2014年全球互联网广告新生态 http://download.csdn.net/detail/cleopard/8340303

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧