> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Aspectos específicos de los scripts escritos en lenguajes .NET

> Aspectos específicos de los scripts de .NET en ABBYY FlexiCapture: versiones de Framework, comportamiento de los objetos COM, depuración, espacios de nombres y llamadas a funciones de módulos globales.

En esta sección se describen los aspectos específicos de los scripts escritos en lenguajes .NET.

* No se utilizan palabras clave adicionales para acceder a los miembros de los objetos. Por ejemplo, en las reglas escritas en lenguajes .NET, el contexto de la regla se pasa como un parámetro con el nombre "Context".
* Los ensamblados de .NET deben compilarse con Microsoft .NET Framework 4.0 o una versión posterior. Puede especificar una versión de .NET Framework en las propiedades de su proyecto de Visual Studio.
* Es posible agregar un ensamblado externo que pueda usarse en scripts y módulos globales. Se pueden usar tanto ensamblados estándar como ensamblados de usuario compilados. Todas las clases de los ensamblados agregados estarán disponibles en los scripts y módulos globales. Consulte [Ensamblados externos](/es/flexi-capture/appendix/scripts/user-assembly) para obtener más información.
* Una vez compilado el script, su cuerpo compilado se almacena en la misma ubicación en la que está definido. Por lo tanto, un script .NET puede ocupar más espacio que otros scripts.
* Todos los objetos de FlexiCapture se definen como objetos COM, por lo que la ejecución de los scripts .NET puede ralentizarse si se accede con frecuencia a los campos de los objetos, debido a las transiciones entre código administrado y no administrado.
* Los objetos de FlexiCapture no admiten subprocesamiento múltiple.
* Para depurar scripts .NET, se utiliza el método [System.Diagnostics.Debugger.Break](https://msdn.microsoft.com/ru-ru/library/system.diagnostics.debugger.break.aspx).
* Al depurar scripts .NET, también necesita un archivo \*.pdb con información de depuración. Este archivo puede ser muy grande y no recomendamos almacenarlo en el proyecto junto con sus scripts. Sin embargo, al depurar un script .NET, debe especificar que el script se compile con determinada información de depuración.
  Si utiliza Microsoft Visual Studio 2010, puede [adjuntarse al proceso](https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx) en el que se ejecuta el código .NET.
* Los objetos de script de FlexiCapture se almacenan en los ensamblados **ControllerInterop.dll** y **ShellInterop.dll** y pertenecen a los espacios de nombres [ABBYY.FlexiCapture](/es/flexi-capture/appendix/scripts/objects) y [ABBYY.FlexiCapture.ClientUI](/es/flexi-capture/appendix/scripts-shell/objects-appendix-scripts-shell), respectivamente. Los ensamblados se encuentran en la carpeta raíz del programa.
* Se puede acceder a todos los objetos de script de ABBYY FlexiCapture por sus propios nombres desde los espacios de nombres ABBYY.FlexiCapture y ABBYY.FlexiCapture.ClientUI. Por ejemplo:

```
ABBYY.FlexiCapture.IDocument document = Batch.Documents[i];>
ABBYY.FlexiCapture.ClientUI.IToolbars toolbars = TaskWindow.MainWindow.Toolbars;
```

* Las directivas "Using" pueden escribirse al inicio del cuerpo del script junto con comentarios y cadenas vacías. Se utiliza la misma sintaxis que en el lenguaje de programación (**using** para C#.NET, **Import** para JScript.NET y **Imports** para VisualBasic.NET). Por ejemplo:

```
using System.Drawing;
Image img = Image.FromFile( @"D:\2.png" );
FCTools.ShowMessage( img.VerticalResolution.ToString(), false );
```

<Note>
  Puede usar la directiva **using** en el [script editor](/es/flexi-capture/interface/script-editor), siempre y cuando la palabra clave "using" aparezca antes de la primera línea de código ejecutable. Por ejemplo:
</Note>

```
using ABBYY.FlexiCapture;
using ABBYY.FlexiCapture.ClientUI;
```

* En los scripts de .NET, las funciones de todos los módulos globales se llaman directamente sin usar el nombre del módulo global.
  **Nota:** Las clases definidas en el Rule Global Script Module y en el Export Global Script Module deben tener nombres diferentes. De lo contrario, se producirá un error al crear una instancia de una clase en el código de una regla.
* Si no desea especificar el valor de un parámetro opcional de la función (en funciones con parámetros opcionales), debe pasar **System.null** o **System.Type.Missing** en su lugar.

<Note>
  En los scripts que se ejecutan de forma no interactiva (es decir, mediante el proceso FlexiEx.exe en lugar de FlexiCapture.exe), el botón **Debug** no se muestra de forma predeterminada para el proceso FlexiEx.exe en la ventana "**Checking for solution**" (en los scripts que contienen un punto de interrupción). Para que se muestre el botón, haga clic en el icono de **Action Center** en la barra de tareas y seleccione **Change Action Center settings → Problem reporting settings → Never check for solutions**.
</Note>
