> ## 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.

# Besonderheiten von Skripten in .NET-Sprachen

> Besonderheiten des .NET-Skriptings in ABBYY FlexiCapture: Framework-Versionen, Verhalten von COM-Objekten, Debugging, Namespaces und Aufruf von Funktionen globaler Module.

In diesem Abschnitt werden die Besonderheiten von Skripten in .NET-Sprachen beschrieben.

* Zusätzliche Schlüsselwörter werden nicht verwendet, um auf Objektmember zuzugreifen. So wird beispielsweise in Regeln, die in .NET-Sprachen geschrieben sind, der Regelkontext als Parameter mit dem Namen "Context" übergeben.
* .NET-Assemblies sollten mit Microsoft .NET Framework 4.0 oder höher kompiliert werden. Sie können eine .NET-Framework-Version in den Eigenschaften Ihres Visual-Studio-Projekts festlegen.
* Es ist möglich, eine externe Assembly hinzuzufügen, die in Skripten und globalen Modulen verwendet werden kann. Dabei können sowohl Standard-Assemblies als auch kompilierte Benutzer-Assemblies verwendet werden. Alle Klassen der hinzugefügten Assemblies stehen in Skripten und globalen Modulen zur Verfügung. Weitere Informationen finden Sie unter [Externe Assemblies](/de/flexi-capture/appendix/scripts/user-assembly).
* Sobald das Skript kompiliert ist, wird der kompilierte Skriptkörper an derselben Stelle gespeichert, an der das Skript definiert ist. Daher kann ein .NET-Skript mehr Speicherplatz beanspruchen als andere Skripte.
* Alle FlexiCapture-Objekte sind als COM-Objekte definiert. Daher kann die Ausführung von .NET-Skripten langsamer werden, wenn häufig auf Objektfelder zugegriffen wird, da dabei Übergänge zwischen verwaltetem und nicht verwaltetem Code stattfinden.
* FlexiCapture-Objekte unterstützen kein Multithreading.
* Zum Debuggen von .NET-Skripten wird die Methode [System.Diagnostics.Debugger.Break](https://msdn.microsoft.com/ru-ru/library/system.diagnostics.debugger.break.aspx) verwendet.
* Beim Debuggen von .NET-Skripten benötigen Sie außerdem eine \*.pdb-Datei mit Debuginformationen. Diese Datei kann sehr groß sein, und wir empfehlen nicht, sie zusammen mit Ihren Skripten im Projekt zu speichern. Beim Debuggen eines .NET-Skripts müssen Sie jedoch angeben, dass das Skript mit bestimmten Debuginformationen kompiliert werden soll.
  Wenn Sie Microsoft Visual Studio 2010 verwenden, können Sie [eine Verbindung mit dem Prozess herstellen](https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx), in dem der .NET-Code ausgeführt wird.
* FlexiCapture-Skriptobjekte sind in den Assemblies **ControllerInterop.dll** und **ShellInterop.dll** gespeichert und gehören entsprechend zu den Namespaces [ABBYY.FlexiCapture](/de/flexi-capture/appendix/scripts/objects) und [ABBYY.FlexiCapture.ClientUI](/de/flexi-capture/appendix/scripts-shell/objects-appendix-scripts-shell). Die Assemblies befinden sich im Stammordner des Programms.
* Auf alle ABBYY FlexiCapture-Skriptobjekte kann unter ihrem jeweiligen Namen aus den Namespaces ABBYY.FlexiCapture und ABBYY.FlexiCapture.ClientUI zugegriffen werden. Zum Beispiel:

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

* Die "Using"-Direktiven können am Anfang des Skriptkörpers zusammen mit Kommentaren und leeren Strings stehen. Dabei wird dieselbe Syntax wie in der Programmiersprache verwendet (**using** für C#.NET, **Import** für JScript.NET und **Imports** für VisualBasic.NET). Zum Beispiel:

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

<Note>
  Sie können die **using**-Direktive im [Skripteditor](/de/flexi-capture/interface/script-editor) verwenden, vorausgesetzt, dass das Schlüsselwort "using" vor der ersten Zeile des ausführbaren Codes steht. Zum Beispiel:
</Note>

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

* In .NET-Skripten werden Funktionen aus allen globalen Modulen direkt aufgerufen, ohne den Namen des globalen Moduls zu verwenden.
  **Hinweis:** Klassen, die im Rule Global Script Module und im Export Global Script Module definiert sind, müssen unterschiedliche Namen haben. Andernfalls tritt beim Erstellen einer Klasseninstanz im Regelcode ein Fehler auf.
* Wenn Sie den Wert eines optionalen Parameters einer Funktion nicht angeben möchten (bei Funktionen mit optionalen Parametern), müssen Sie stattdessen **System.null** oder **System.Type.Missing** übergeben.

<Note>
  Bei Skripten, die nicht interaktiv ausgeführt werden (also vom Prozess FlexiEx.exe statt von FlexiCapture.exe), wird im Fenster "**Checking for solution**" für den Prozess FlexiEx.exe standardmäßig keine Schaltfläche **Debug** angezeigt (bei Skripten mit einem Haltepunkt). Damit die Schaltfläche angezeigt wird, klicken Sie auf das Symbol **Action Center** in der Taskleiste und wählen Sie **Change Action Center settings → Problem reporting settings → Never check for solutions**.
</Note>
