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
}
}
查看全文
相关阅读:
CDR
xshell鼠标文本设置
.NET多线程学习之龟兔赛跑
js传“+”或“&”到后台变空值的问题
Java递归读取文件夹下所有文档
破解Myeclipse10找不到Commonplugins文件夹
Java下载文件
根据给定日期判断上一旬的开始结束日期
查看Tomcat内存并调整Tomcat内存
Could not parse mapping document from input stream
原文地址:https://www.cnblogs.com/sunbingzibo/p/971619.html
最新文章
跨平台编译C++简单示例(cmake)
使用Python实现AES(256)加密,ECB模式,pkcs7补全(AES五种加密模式(CBC、ECB、CTR、OCF、CFB))
Python中 range和xrange的区别
[JVM] JVM类加载机制总结
[MySQL] MySQL索引原理及优化
[Redis] Redis内存模型总结
[Redis] Redis日常学习总结一
[算法] 实现栈和队列
[Java8] lambda表达式和stream流式操作
JVM内存模型和面试题解析
热门文章
Java反射实现原理分析
[多线程] Java线程池应用及原理分析(JDK1.8)
查看进程占用的句柄数
陈述(statement)计算机概念
Git Pull强制覆盖本地文件
逗号运算符
git 怎么看是fork分支还是主干
xshell不能输入中文(为乱码)
用ssh方式git clone/pull/push不输密码设置(设置SSH Keys)
逗号表达式
Copyright © 2011-2022 走看看