zoukankan
html css js c++ java
sharpdevelop中如何动态加载程序集
Sharpdevelop将整个程序的功能分散到了多个工程中,这样开发的时候,一个工程就不用加载过多的文件,编译的速度也加快了,IDE的反应速度也能快不少,另外程序在维护的时候,也能方便的替换相应的Assembly来实现不同的功能,组件的升级.
Sharpdevelop将动态加载的功能同样也放在了Addin类中,但是加载的Assembly放在了AddInTree中的AssemlbyHashTable,我使用了一个Dictinary的泛型来替代了原有的Hashtable
Sharpdevelop作者为了保证AddInTree的唯一性使用了一个singleton模式,
private
void
Initlization()
{
System.Diagnostics.Debug.Assert(File.Exists(xmlfile),
"
配置文件不存在
"
);
XmlDocument doc
=
new
XmlDocument();
doc.Load(xmlfile);
//
加载addin的版本信息,作者信息
foreach
(
object
obj
in
doc.DocumentElement.ChildNodes)
{
if
(
!
(obj
is
XmlElement))
continue
;
XmlElement curel
=
obj
as
XmlElement;
switch
(curel.Name)
{
case
"
Runtime
"
:
LoadAssembly(curel);
break
;
default
:
break
;
}
}
}
private
void
LoadAssembly(XmlElement curel)
{
foreach
(
object
obj
in
curel.ChildNodes)
{
if
(
!
(obj
is
XmlElement))
continue
;
//
<Runtime>
//
<Import assembly="cxytestdll.dll"/>
//
</Runtime>
//
取出cxytestdll.dll这个文本
XmlElement xe
=
obj
as
XmlElement;
string
asmfilename
=
xe.Attributes[
"
assembly
"
].InnerText;
Debug.Assert(
!
string
.IsNullOrEmpty(asmfilename),
"
add 中runtime的结点中assembly不能为空,其中包含着assembly的路径
"
);
//
assebmly的路径,并加载
string
asmpath
=
Path.GetDirectoryName(xmlfile)
+
asmfilename;
DefaultAddinTree.AddinTree.LoadAssembly(asmfilename);
}
}
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Windows.Forms;
using
System.Reflection;
namespace
CSLearn
{
public
interface
IAddinTree
{
void
LoadAssembly(
string
assemblyfile);
}
public
class
DefaultAddinTree:IAddinTree
{
Dictionary
<
string
, Assembly
>
asm;
DefaultAddinTree()
{
asm
=
new
Dictionary
<
string
, Assembly
>
();
}
public
Dictionary
<
string
, Assembly
>
LoadedAssembly
{
get
{
return
asm; }
}
static
DefaultAddinTree thetree;
//
不规范的singlton
public
static
DefaultAddinTree AddinTree
{
get
{
if
(thetree
==
null
)
thetree
=
new
DefaultAddinTree();
return
thetree;
}
}
IAddinTree 成员
#region
IAddinTree 成员
//
判断当前,已加载assembly,中是否有assebmly,如果有就不加载了,反之加载
public
void
LoadAssembly(
string
assemblyfile)
{
if
(asm.ContainsKey(assemblyfile))
return
;
Assembly tpasm
=
Assembly.LoadFrom(assemblyfile);
asm.Add(assemblyfile,tpasm);
}
#endregion
}
}
查看全文
相关阅读:
jquery 查找子元素的几种方法
kvm虚拟化之kvm虚拟机控制台登陆
KVM虚拟化之windows虚拟机性能调整
KVM虚拟机的日常管理与配置
windows kvm虚拟机安装
linux kvm虚拟机安装
如何在linux上安装使用virt-manager
KVM虚拟环境安装
SSH批量管理 expect自动交互
LVS+keepalived快速搭建测试环境
原文地址:https://www.cnblogs.com/sunbingzibo/p/971619.html
最新文章
error C2065: “IDD_DIALOG1” : 未声明的标识符
解决MFC对话框类不能建立成功的方法(出现unable to open the files XX for class XX)
VC++动态链接库(DLL)编程深入浅出
大页(Huge Page)简单介绍
EPT和VPID简介
docker-ce的安装
python内置函数
编码&解码
bash实现自动补全
mysql系列安装
热门文章
tcpdump抓包指令使用示例
linux查看系统CPU,内存,硬盘使用情况
mysql读写分离的三种实现方式
win10 配置pylucene
ubuntu配置django
ubuntu 配置 django
python中的深拷贝和浅拷贝理解
win10 sublime license
正则匹配空行
jquery怎么找到元素下面的第一个子元素
Copyright © 2011-2022 走看看