# aardio 范例: 内存加载 .NET 程序集（DLL）



```aardio
//aardio 内存加载 .NET 程序集（DLL）
import console.int;
import dotNet;

/*
在『虚拟程序集引用表』注册一个或多个虚拟程序集，
这些虚拟程序集可以是内存程序集、本地程序集、EXE 内嵌资源中的程序集。

aardio 加载的 .NET 程序找不到程序集（DLL）时，
会查找『虚拟程序集引用表』并加载已注册的虚拟 DLL

可用『 aardio 工具 » 转换工具 » .NET 引用表转换 』自动生成下面的代码。
*/
dotNet.reference({
	//「键」为程序集短名称（ DLL 文件名 ）。
	//「值」为程序集内存数据或文件路径（支持内嵌资源路径），也可以是一个返回所需值的函数。
	
	//虚拟 CSNET2ClassLibrary.dll
	"CSNET2ClassLibrary" = $"\CSNET2ClassLibrary.dll";
	
	//虚拟 A.B.C.dll
	"A.B.C" = $"\CSNET2ClassLibrary.dll";	
}) 

//加载上面的虚拟程序集（也可以利用上面的方法添加依赖 DLL ）。
var assembly = dotNet.load("CSNET2ClassLibrary"); 

//可以直接在参数 @2 里写 DLL 内存数据或文件路径（自动调用 dotNet.reference）。
var assembly = dotNet.load("CSNET2ClassLibrary",$"\CSNET2ClassLibrary.dll"); 

//导入程序集中的命名空间或类。
//.NET 命名空间或类名建议首字符大写，aardio 类名建议首字符小写。
assembly.import("CSNET2ClassLibrary");

//调用 .NET 类的静态成员函数
var len =  CSNET2ClassLibrary.CSSimpleObject.GetStringLength("HelloWorld");
console.log( len ); 

//用 CSNET2ClassLibrary 命名空间下面的类构造对象实例，对象实例建议首字符小写。
var simpleObject = CSNET2ClassLibrary.CSSimpleObject()  

//获取 .NET 对象的属性值
console.log( simpleObject.FloatProperty );

/*
也可以用 dotNet.loadFile() 函数自内存加载单个 DLL 文件，
但是 dotNet.loadFile() 并不支持 『虚拟程序集引用表』，无法添加依赖 DLL。
*/
```

