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

# .NET 言語で記述されたスクリプトの詳細

> ABBYY FlexiCapture における .NET スクリプトの詳細: Framework バージョン、COM オブジェクトの動作、デバッグ、名前空間、およびグローバルモジュール関数の呼び出し。

このセクションでは、.NET 言語で記述されたスクリプトの特性について説明します。

* オブジェクトのメンバーにアクセスするための追加キーワードは使用されません。たとえば、.NET 言語で記述されたルールでは、ルールのコンテキストは "Context" という名前のパラメーターとして渡されます。
* .NET アセンブリは、Microsoft .NET Framework 4.0 以上を使用してコンパイルする必要があります。.NET Framework のバージョンは、Visual Studio プロジェクトのプロパティで指定できます。
* スクリプトおよびグローバルモジュールで使用できる外部アセンブリを追加できます。標準アセンブリとユーザーがコンパイルしたアセンブリの両方を使用できます。追加したアセンブリ内のすべてのクラスは、スクリプトおよびグローバルモジュールで利用できます。詳しくは [External Assemblies](/ja/flexi-capture/appendix/scripts/user-assembly) を参照してください。
* スクリプトがコンパイルされると、コンパイル済みのスクリプト本体は、そのスクリプトが定義されている場所と同じ場所に保存されます。そのため、.NET スクリプトは他のスクリプトより多くの領域を占有する場合があります。
* すべての FlexiCapture オブジェクトは COM オブジェクトとして定義されているため、マネージド-アンマネージド間の遷移により、オブジェクトの field に頻繁にアクセスすると .NET スクリプトの動作が遅くなることがあります。
* FlexiCapture オブジェクトはマルチスレッドをサポートしていません。
* .NET スクリプトのデバッグには、[System.Diagnostics.Debugger.Break](https://msdn.microsoft.com/ru-ru/library/system.diagnostics.debugger.break.aspx) メソッドを使用します。
* .NET スクリプトをデバッグする場合は、デバッグ情報を含む \*.pdb ファイルも必要です。このファイルは非常に大きくなる可能性があるため、スクリプトと一緒にプロジェクトに保存することは推奨されません。ただし、.NET スクリプトをデバッグする際は、そのスクリプトが特定のデバッグ情報を使用してコンパイルされるよう指定する必要があります。
  Microsoft Visual Studio 2010 を使用している場合は、.NET コードが実行される process に [アタッチする](https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx) こともできます。
* FlexiCapture スクリプトオブジェクトは **ControllerInterop.dll** および **ShellInterop.dll** アセンブリに格納されており、それぞれ [ABBYY.FlexiCapture](/ja/flexi-capture/appendix/scripts/objects) および [ABBYY.FlexiCapture.ClientUI](/ja/flexi-capture/appendix/scripts-shell/objects-appendix-scripts-shell) 名前空間に属します。これらのアセンブリはプログラムのルートフォルダーにあります。
* すべての ABBYY FlexiCapture スクリプトオブジェクトには、ABBYY.FlexiCapture および ABBYY.FlexiCapture.ClientUI 名前空間から、それぞれの名前でアクセスできます。例:

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

* "Using" ディレクティブは、コメントや空文字列とともに、スクリプト本体の先頭に記述できます。プログラミング言語と同じ構文が使用されます (C#.NET では **using**、JScript.NET では **Import**、VisualBasic.NET では **Imports**) 。たとえば次のとおりです。

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

<Note>
  実行可能コードの先頭行より前にキーワード "using" がある場合は、[スクリプト エディター](/ja/flexi-capture/interface/script-editor) で **using** ディレクティブを使用できます。例えば次のようになります。
</Note>

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

* .NETスクリプトでは、すべてのグローバルモジュールの関数を、グローバルモジュール名を指定せずに直接呼び出します。
  **注:** Rule Global Script Module および Export Global Script Module で定義されるクラスは、それぞれ異なる名前でなければなりません。そうでない場合、ルールのコードでクラスのインスタンスを作成するとエラーが発生します。
* 関数のオプションパラメーターの値を指定したくない場合 (オプションパラメーターを持つ関数の場合) 、代わりに **System.null** または **System.Type.Missing** を渡す必要があります。

<Note>
  非対話的に実行されるスクリプト (つまり、FlexiCapture.exe ではなく FlexiEx.exe プロセスによって実行されるスクリプト) の場合、既定では、"**Checking for solution**" ウィンドウに **Debug** ボタンは表示されません (ブレークポイントを含むスクリプトの場合でも、FlexiEx.exe プロセス用の **Debug** ボタンは表示されません)。このボタンを表示するには、タスク バーの **Action Center** アイコンをクリックし、**Change Action Center settings → Problem reporting settings → Never check for solutions** を選択します。
</Note>
