UNPKG

vox-core

Version:

Runtime de aplicaciones multiplataforma

141 lines (97 loc) 4.87 kB
# vox-core-clr **NOTICIA**: vox-core-clr es parte de [vox-core](https://www.npmjs.com/package/vox-core), y por tanto se ejecuta sobre vox-core. Si usted ya tiene instalado vox-core no descargue este módulo, puesto que vox-core ya tiene incluido este módulo. Si desea usar este módulo sin instalar vox-core por favor **instale [voxnode-clr](https://www.npmjs.com/package/voxnode-clr)** VoxSoftware está creando módulos independientes de cada parte de vox-core utilizando el prefijo *voxnode-* en lugar de usar *vox-core-*. Por lo tanto si desea usar alguno de los submódulos presentes en vox-core, de manera independiente revise utilizando este prefijo. > vox-core-clr ==> voxnode-clr vox-core-clr permite usar Tipos y Ensamblados .NET desde nodejs. vox-core-clr tiene las siguientes ventajas sobre edge.js * No tiene que compilarse. vox-core-clr crea un canal de comunicación entre .NET y nodejs * Permite usar clases ya predeterminadas de .NET sin tener que compilar código fuente C# u otro lenguaje * Los métodos devuelven tareas asíncronas (Similares a Promises, compatibles con async/await: *Regenerator* de facebook y *vox-core-es6* de vox-core) vox-core-clr tiene ciertas características más: * Permite compilar código fuente C# * Permite cargar ensamblados por nombre y por archivo * Permite utilizar cualquiera de las sobrecargas de un método * Permite obtener y ajustar valores de propiedades con índices ### Dependencias Debe instalar .NET Framework 4.0 en Windows (en versiones recientes viene preinstalado), o Mono en sistemas Unix ### Cambios * [Historial de cambios](/submodules/vox-core-clr/CHANGES.md) ### Documentación Incluye las siguientes clases: * [VW.Clr.Field](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Field.html) * [VW.Clr.Function](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Function.html) * [VW.Clr.InvocationException](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.InvocationException.html) * [VW.Clr.InvocationTimeoutException](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.InvocationTimeoutException.html) * VW.Clr.IPC *uso interno* * [VW.Clr.Manager](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Manager.html) * [VW.Clr.Property](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Property.html) * [VW.Clr.Type](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Type.html) ### Ejemplo Este ejemplo usa sintaxis ES6 y async/await. Se puede usar un transpilador como babel, o ejecutar directamente con vox-core creando un archivo con extensión .es6 ```javascript var clr= new core.VW.Clr.Manager() var test= async function(){ // Esta parte se demora un poco mientras se carga por completo el canal de comunicación await clr.loadAssembly("System.Xml") // La primera vez se demora un poco más porque carga los miembros de los tipos var d= new Date() await testxml() console.info("Time: ", new Date()-d) var d= new Date() await testxml() console.info("Time: ", new Date()-d) var d= new Date() await testxmlScope() console.info("Time: ", new Date()-d) var d= new Date() await testxmlScope() console.info("Time: ", new Date()-d) await clr.close() process.exit(0) } var testxml= async function(){ try{ var Xml= {} // Cargar los tipos ... Xml.Document= clr.get("System.Xml.XmlDocument") await Xml.Document.loadMembers() var doc= await Xml.Document.create() var root= await doc.CreateXmlDeclaration("1.0","utf8","yes") await doc.AppendChild(root) var elemento1= await doc.CreateElement("element1") var elemento2= await doc.CreateElement("element2") await elemento1.AppendChild(elemento2) await elemento2.setInnerText("Hola mundo!") await doc.AppendChild(elemento1) console.info(await doc.getOuterXml()) var tasks=[root.dispose(), elemento1.dispose(), elemento2.dispose(), doc.dispose()] await core.VW.Task.waitMany(tasks) } catch(er){ console.error(er) } } var testxmlScope= async function(){ try{ var Xml= {} // Cargar los tipos ... var scope= clr.beginScope() Xml.Document= clr.get("System.Xml.XmlDocument") await Xml.Document.loadMembers() var doc= await scope(Xml.Document).create() var root= await scope(doc).CreateXmlDeclaration("1.0","utf8","yes") await doc.AppendChild(root) var elemento1= await doc.CreateElement("element1") var elemento2= await doc.CreateElement("element2") await elemento1.AppendChild(elemento2) await elemento2.setInnerText("Hola mundo!") await doc.AppendChild(elemento1) console.info(await doc.getOuterXml()) await scope.end() } catch(er){ console.error(er) } } test() ```