像这样根结点是Addin的一个XML文件就是Addin
<
AddIn
name
= "Typed Collection Wizard"
author = "Mike Krueger"
copyright = "GPL"
url = "unknown"
description = "Creates a typed collection"
version = "1.0.0" >
< Runtime >
< Import assembly ="TypedCollectionWizard.dll" />
</ Runtime >
< Extension path = "/SharpDevelop/Templates/File/TypedCollection" >
< DialogPanel id = "CollectionGenerator"
label = "Typed Collection"
class = "TypedCollectionGenerator.TypedCollectionWizardPanel" />
</ Extension >
</ AddIn >
author = "Mike Krueger"
copyright = "GPL"
url = "unknown"
description = "Creates a typed collection"
version = "1.0.0" >
< Runtime >
< Import assembly ="TypedCollectionWizard.dll" />
</ Runtime >
< Extension path = "/SharpDevelop/Templates/File/TypedCollection" >
< DialogPanel id = "CollectionGenerator"
label = "Typed Collection"
class = "TypedCollectionGenerator.TypedCollectionWizardPanel" />
</ Extension >
</ AddIn >
<Runtime>中包含的是这个addin正常工作所需的程序集列表,
<Extension>中包含的子结点,叫做一个codon
Addin类中分析addin文件的部分
public
class
AddIn
... {
string name = null;
string author = null;
string copyright = null;
string url = null;
string description = null;
string version = null;
string fileName = null;
Hashtable runtimeLibraries = new Hashtable();
ArrayList extensions = new ArrayList();
/**//// <summary>
/// returns a hashtable with the runtime libraries
/// where the key is the assembly name and the value
/// is the assembly object.
/// </summary>
public Hashtable RuntimeLibraries
...{
get
...{
return runtimeLibraries;
}
}
/**//// <summary>
/// returns a arraylist with all extensions defined by
/// this addin.
/// </summary>
public ArrayList Extensions
...{
get
...{
return extensions;
}
}
/**//// <summary>
/// Initializes this addIn. It loads the xml definition in file
/// fileName.
/// </summary>
public void Initialize(string fileName)
...{
this.fileName = fileName;
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
try
...{
name = doc.SelectSingleNode("AddIn/@name").Value;
author = doc.SelectSingleNode("AddIn/@author").Value;
copyright = doc.SelectSingleNode("AddIn/@copyright").Value;
url = doc.SelectSingleNode("AddIn/@url").Value;
description = doc.SelectSingleNode("AddIn/@description").Value;
version = doc.SelectSingleNode("AddIn/@version").Value;
}
catch (Exception)
...{
throw new AddInLoadException("这不是一个标准的addin文件,不包含,作者,版权,地址等信息");
}
foreach (object o in doc.DocumentElement.ChildNodes)
...{
if (!(o is XmlElement))
...{
continue;
}
XmlElement curEl = (XmlElement)o;
switch (curEl.Name)
...{
case "Runtime"://动态地加入运行时支持库
AddRuntimeLibraries(Path.GetDirectoryName(fileName), curEl);
break;
case "Extension"://加入Extension
AddExtensions(curEl);
break;
}
}
}
}
... {
string name = null;
string author = null;
string copyright = null;
string url = null;
string description = null;
string version = null;
string fileName = null;
Hashtable runtimeLibraries = new Hashtable();
ArrayList extensions = new ArrayList();
/**//// <summary>
/// returns a hashtable with the runtime libraries
/// where the key is the assembly name and the value
/// is the assembly object.
/// </summary>
public Hashtable RuntimeLibraries
...{
get
...{
return runtimeLibraries;
}
}
/**//// <summary>
/// returns a arraylist with all extensions defined by
/// this addin.
/// </summary>
public ArrayList Extensions
...{
get
...{
return extensions;
}
}
/**//// <summary>
/// Initializes this addIn. It loads the xml definition in file
/// fileName.
/// </summary>
public void Initialize(string fileName)
...{
this.fileName = fileName;
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
try
...{
name = doc.SelectSingleNode("AddIn/@name").Value;
author = doc.SelectSingleNode("AddIn/@author").Value;
copyright = doc.SelectSingleNode("AddIn/@copyright").Value;
url = doc.SelectSingleNode("AddIn/@url").Value;
description = doc.SelectSingleNode("AddIn/@description").Value;
version = doc.SelectSingleNode("AddIn/@version").Value;
}
catch (Exception)
...{
throw new AddInLoadException("这不是一个标准的addin文件,不包含,作者,版权,地址等信息");
}
foreach (object o in doc.DocumentElement.ChildNodes)
...{
if (!(o is XmlElement))
...{
continue;
}
XmlElement curEl = (XmlElement)o;
switch (curEl.Name)
...{
case "Runtime"://动态地加入运行时支持库
AddRuntimeLibraries(Path.GetDirectoryName(fileName), curEl);
break;
case "Extension"://加入Extension
AddExtensions(curEl);
break;
}
}
}
}