次の方法で共有


Visual Studio Codeを使用して、Azure Logic Appsで Standard ワークフローから.NETコードを作成して実行する

適用対象: Azure Logic Apps (Standard)

統合シナリオで、Azure Logic Appsの組み込みの操作とコネクタ以外のカスタム タスクまたはロジックが必要な場合は、標準ワークフローで custom 関数として.NETコードを作成して実行します。 ワークフローでは、カスタム解析、検証などのタスクを実行したり、ビジネス ルールを適用したりできます。 この機能を使用すると、次のタスクなどのシナリオを実装できます。

  • ビジネス ロジックの実装をカスタマイズします。
  • 解析をカスタマイズして、受信メッセージから情報を抽出します。
  • データ検証と単純な変換を実行します。
  • 計算を実行します。
  • API など、別のシステムに送信される送信メッセージを整形します。

このガイドでは、Visual Studio Codeを使用して、独自の.NET コードを Standard ワークフローで直接記述して実行する方法について説明します。 カスタム コードとワークフロー オーケストレーションを一緒に保持し、1 つのセッションでデバッグし、それらを 1 つのソリューションとしてデプロイできるように、Visual Studio Codeを使用してローカル関数を作成、デバッグ、デプロイする方法について説明します。

カスタム インライン .NET コードは、次のシナリオには適していません。

  • 10 分を超える可能性があるプロセスの実行。
  • 大規模なデータとメッセージの変換を試みます。
  • 複雑なバッチ処理とバッチ解除のシナリオの実行。
  • ストリーミングを実装する BizTalk サーバー パイプライン コンポーネントの使用。

詳細については、「 制限事項」を参照してください。

前提条件

  • Azure アカウントとサブスクリプション。 無料のAzure アカウントを取得します。

  • Azure Logic Apps (Standard) 拡張子を持つ最新のVisual Studio Code。

    前提条件については、Visual Studio Code を使用したシングルテナント Azure Logic Appsの Standard ワークフローの作成に関するページを参照してください。

    拡張機能には、次の機能と利点があります。

    • 非常に困難な統合の問題を解決する柔軟性と制御性を備えた関数を作ることにより独自のコードを生成します。
    • Visual Studio Codeでコードをローカルでデバッグします。 同じデバッグ セッションでコードとワークフローをステップ実行します。
    • コードをワークフローと共にデプロイします。 他のサービス プランは必要ありません。
    • BizTalk Server移行シナリオをサポートして、カスタム .NET投資をオンプレミスからクラウドにリフト アンド シフトできるようにします。
  • コード プロジェクトに使用するローカル フォルダー。

制限事項

  • カスタム関数機能は、Windowsで実行されているVisual Studio Codeでのみ使用できます。 この機能では、Azureにデプロイおよびホストされる標準ロジック アプリ ワークフローに対して、.NET Framework と .NET 8 の使用がサポートされています。

  • Azure ポータルでカスタム関数の作成を使用することはできません。 ただし、ワークフロー内のカスタム関数からの出力を操作するには、次の手順に従います。

    1. Azureに関数をデプロイしたら、Azure ポータルの ワークフローからコードを呼び出す手順に従います。

    2. [このロジック アプリでローカル関数を呼び出す] という名前の組み込みアクションをワークフローに追加します。 デプロイするカスタム関数を選択し、コードを実行します。

    3. 他のワークフローと同様に、後続のワークフロー アクションを使用してカスタム関数の出力を参照します。 組み込みアクションの実行履歴、入力、出力が表示されます。

一般的な制限事項については、Limits と Azure Logic Appsを参照してください。

1: コード プロジェクトを作成する

Visual Studio Code の Azure Logic Apps (Standard) 拡張機能には、ワークフローを使用して独自のコードを記述、デバッグ、デプロイするための合理化されたエクスペリエンスを提供するコード プロジェクト テンプレートが含まれています。 このプロジェクト テンプレートは、ワークスペース ファイルと 2 つのサンプル プロジェクトを作成します。1 つはコードを記述するプロジェクトで、もう 1 つはワークフローを作成するプロジェクトです。

コードとワークフローの両方に同じプロジェクト フォルダーを使用することはできません。

コード プロジェクトを作成するには、次の手順に従います。

  1. Visual Studio Codeで、Azure アカウントにサインインします

    サインインに通常よりも時間がかかる場合、Visual Studio Codeはデバイス コードを指定して、Microsoft認証 Web サイトを介してサインインするように求められます。 代わりにコードを使用してサインインするには、次の手順に従います。

    1. [ デバイス コードの使用] を選択し、[ コピーして開く] を選択します。

    2. [ リンクを開く ] を選択して新しいブラウザー ウィンドウを開き、認証 Web サイトに進みます。

    3. [アカウントにサインインする] ページで認証コードを入力し、 [次へ] を選択します。

  2. アクティビティ バーで、Azure アイコンを選択します。

  3. Azure ウィンドウで、Workspace セクションに移動します。 ツールバーが表示されるように、タイトル領域の上にポインターを移動します。

  4. Azure Logic Apps メニューの 新しいロジック アプリ ワークスペースの作成を選択します。

    スクリーンショットには、Visual Studio CodeのAzureウィンドウ、ワークスペースセクションのツールバー、および「新しいロジックアプリワークスペースの作成」のオプションが選択されている様子が表示されています。

  5. [ フォルダーの選択] ウィンドウで、ローカル プロジェクト フォルダーを参照し、フォルダーを選択して 、[選択] を選択します。

  6. [ 新しいロジック アプリ ワークスペースの作成 ] ウィンドウの [ワークスペース名 ] プロンプトで、ワークスペースの名前を入力し、Enter キーを押します。

    この例では、ワークスペース名として weather-app を使用します。

    ワークスペース名を入力するプロンプトを示すスクリーンショット。

    この例では、ワークスペース名として weather-project を使用します。

  7. [新しいプロジェクトのテンプレートの選択] プロンプトで、カスタム コード プロジェクトを含むロジック アプリを選択します。

    プロジェクト テンプレートを選択するプロンプトを示すスクリーンショット。

  8. ターゲット フレームワークの選択 プロンプトで、.NET Framework または .NET 8 を選択します。

  9. 後続のプロンプトに従って、次の情報を指定します。

    プロンプト 値の例
    ロジック アプリ名 weather-logic-app
    .NET 関数プロジェクトのFunction 名 WeatherForecast
    Namespace .NET 関数プロジェクト用 Contoso.Enterprise
    プロジェクトの最初のワークフローのテンプレートを選択します。

    - ステートフル ワークフロー
    - ステートレス ワークフロー
    - 自律エージェント
    - 会話型エージェント
    - 今のところスキップする
    ステートフル ワークフロー
    ワークフロー名 weather-workflow
  10. [ プロジェクトを開く方法の選択 ] プロンプト で、[現在のウィンドウで開く] を選択します。

    この手順を完了すると、Visual Studio Codeワークスペースが作成されます。これには、.NET関数プロジェクトとロジック アプリ プロジェクトが既定で含まれます。次に例を示します。

    スクリーンショットには、ロジック アプリ プロジェクトと .NET 関数プロジェクトを含む作成済みのワークスペースが表示されます

    [エクスプローラー] ウィンドウで、ワークスペース内の次のフォルダーに注意してください。

    Folder 説明
    < workspace-name> .NET関数プロジェクトとロジック アプリ ワークフロー プロジェクトの両方が含まれます。
    < ロジック アプリ名> ロジック アプリ プロジェクトのファイルとその他の成果物が含まれます。 たとえば、 workflow.json ファイルは、ワークフローを構築できるワークフロー定義ファイルです。
    < function-name> .NET関数プロジェクトのファイルとその他の成果物が含まれます。 たとえば、< ファイルは、コードを作成できるコード ファイルです。
  11. Azure Logic Apps 用のコネクタを有効にするプロンプトで、Azure のコネクタを使用するを選択します。

  12. サブスクリプションの選択プロンプトで、必要なAzureサブスクリプションを選択します。

  13. [ 新しいリソースのリソース グループの選択 ] プロンプトで、目的のリソース グループを選択するか 、新しいリソース グループを作成します。

  14. 新しいリソースの場所を選択しますプロンプトで、デプロイするAzureリージョンを選択します。

  15. Azure コネクタの認証方法の選択で、認証が必要な接続に使用する認証の種類を選択します。

    認証の種類 説明
    マネージド ID ロジック アプリ リソースでシステム割り当て ID またはユーザー割り当て ID を使用するには、[ マネージド サービス ID] を選択します。

    既定では、Standard ロジック アプリ リソースでは、システム割り当て ID が既に有効になっています。 ただし、ターゲット リソースにロール アクセス権を持つ ID と、その他の要件を設定する必要があります。

    詳細については、「 マネージド ID へのロールベースのアクセスの割り当て」を参照してください。
    接続キー 接続文字列とアクセス キーを使用して、ターゲット リソースへのアクセスを設定します。

これらの手順を完了したら、次のセクションに進み、コードを作成できるようにします。

2: コードを記述する

  1. エクスプローラー ウィンドウで、関数プロジェクト フォルダーを展開し、<function-name>.cs ファイルを開きます。

    このファイルには、前に指定した値を含むサンプル コードと特定のコード要素が含まれています。

    この例では、 WeatherForecast.cs 関数ファイルには、値の例を含む次のコード要素が含まれています。

    Code 要素 価値
    名前空間名 Contoso.Enterprise
    クラス名 WeatherForecast
    関数名 WeatherForecast
    関数のパラメーター zipcodetemperatureScale
    の戻り値の型 : Task
    複合型 Weather

    次の例は、完全なサンプル コードを示しています。

    //------------------------------------------------------------
    // Copyright (c) Microsoft Corporation. All rights reserved.
    //------------------------------------------------------------
    
    namespace Contoso.Enterprise
    {
        using System;
        using System.Collections.Generic;
        using System.Threading.Tasks;
        using Microsoft.Azure.Functions.Extensions.Workflows;
        using Microsoft.Azure.WebJobs;
        using Microsoft.Extensions.Logging;
    
        /// <summary>
        /// Represents the WeatherForecast flow invoked function.
        /// </summary>
        public class WeatherForecast
        {
    
            private readonly ILogger<WeatherForecast> logger;
    
            public WeatherForecast(ILoggerFactory loggerFactory)
            {
                logger = loggerFactory.CreateLogger<WeatherForecast>();
            }
    
            /// <summary>
            /// Executes the logic app workflow.
            /// </summary>
            /// <param name="zipCode">The zip code.</param>
            /// <param name="temperatureScale">The temperature scale (e.g., Celsius or Fahrenheit).</param>
            [FunctionName("WeatherForecast")]
            public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
            {
    
                this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
                // Generate random temperature within a range based on the temperature scale
                Random rnd = new Random();
                var currentTemp = temperatureScale == "Celsius" ? rnd.Next(1, 30) : rnd.Next(40, 90);
                var lowTemp = currentTemp - 10;
                var highTemp = currentTemp + 10;
    
                // Create a Weather object with the temperature information
                var weather = new Weather()
                {
                    ZipCode = zipCode,
                    CurrentWeather = $"The current weather is {currentTemp} {temperatureScale}",
                    DayLow = $"The low for the day is {lowTemp} {temperatureScale}",
                    DayHigh = $"The high for the day is {highTemp} {temperatureScale}"
                };
    
                return Task.FromResult(weather);
            }
    
            /// <summary>
            /// Represents the weather information for WeatherForecast.
            /// </summary>
            public class Weather
            {
                /// <summary>
                /// Gets or sets the zip code.
                /// </summary>
                public int ZipCode { get; set; }
    
                /// <summary>
                /// Gets or sets the current weather.
                /// </summary>
                public string CurrentWeather { get; set; }
    
                /// <summary>
                /// Gets or sets the low temperature for the day.
                /// </summary>
                public string DayLow { get; set; }
    
                /// <summary>
                /// Gets or sets the high temperature for the day.
                /// </summary>
                public string DayHigh { get; set; }
            }
        }
    }
    

    この関数定義には、作業を開始するために使用できる既定の Run メソッドが含まれています。 このサンプル Run メソッドは、複雑な.NET型など、さまざまな入力と出力を渡すなど、カスタム関数機能で使用できるいくつかの機能を示しています。

    < function-name>.cs ファイルには、Application Insights リソースへのイベントのログ記録をサポートするILogger インターフェイスも含まれています。 Application Insights にトレース情報を送信し、その情報をワークフローからのトレース情報と共に格納できます。次に例を示します。

    private readonly ILogger<WeatherForecast> logger;
    
    public WeatherForecast(ILoggerFactory loggerFactory)
    {
        logger = loggerFactory.CreateLogger<WeatherForecast>();
    }
    
    [FunctionName("WeatherForecast")]
    public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
    {
    
        this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
        <...>
    
    }
    
  2. サンプル関数コードを独自のコードに置き換え、特定のシナリオの既定の Run メソッドを編集します。 または、[FunctionName("<function-name>")] 宣言を含む関数をコピーし、関数の名前を一意の名前に変更することもできます。 その後、名前を変更した関数を、ニーズに合わせて編集できます。

この例では、変更がないと仮定して、元のサンプル コードを続行します。

3: コードをコンパイルしてビルドする

コードの記述が完了したら、コンパイルしてビルド エラーが存在しないことを確認します。 .NET関数プロジェクトにはビルド タスクが自動的に含まれ、ワークフローで実行するカスタム関数を探すロジック アプリ プロジェクトの lib\custom フォルダーにコードをコンパイルして追加します。 これらのタスクは、.NETのバージョンに応じて、アセンブリを lib\custom\net472 または lib\custom\net8 フォルダーに配置します。

次の手順に従います。

  1. Visual Studio Codeのアクティビティ バーで、Explorer を選択します。

  2. [エクスプローラー] ウィンドウで、Functions プロジェクト フォルダーのショートカット メニューを開き、[関数プロジェクトのビルド] を選択します。

    [関数プロジェクトのビルド] プロジェクトのオプションが選択されている関数プロジェクトのショートカット メニューを示すスクリーンショット。

    ビルド タスクは、関数プロジェクトに対して実行されます。 ビルドが成功すると、[ ターミナル ] ウィンドウに [ビルドに成功しました ] というメッセージが表示されます。

  3. ロジック アプリ プロジェクトに次の項目が存在することを確認します。

    • ワークスペースで次のフォルダーを展開します: <your-logic-app>>lib\custom>net472 または net8、こちらは使用する .NET バージョンに基づきます。 net472 または net8 という名前のサブフォルダーに、コードの実行に必要なアセンブリ (DLL) ファイル (<function-name>.dllという名前のファイルが含まれていることを確認します。

    • ワークスペースで、次のフォルダーを展開します:<lib\custom>。 < という名前のサブフォルダーに function.json ファイルが含まれていることを確認します。このファイルには、記述した関数コードに関するメタデータが含まれています。> ワークフロー デザイナーは、このファイルを使用して、コードの呼び出し時に必要な入力と出力を判断します。

    次の例は、ロジック アプリ プロジェクトで生成されたアセンブリとその他のファイルの例を示しています。

    スクリーンショットには、.NET関数とロジックアプリプロジェクトを含むロジックアプリワークスペースが表示されています。新しく生成されたアセンブリと他の必要なファイルが表示されています。

4: ワークフローからコードを呼び出す

コードがコンパイルされ、ロジック アプリ プロジェクトにコードを実行するために必要なファイルが含まれていることを確認したら、コードを呼び出すワークフローを設定します。

  1. エクスプローラー ウィンドウで、<workspace-name>、<logic-app-name>、および <workflow-name> を展開します。

  2. workflow.jsonのショートカット メニューを開き、[デザイナーを開く] を選択します。

    ワークフロー デザイナーが開き、次のトリガーとアクションを含む既定のワークフローが表示されます。

    Operation 説明
    Trigger HTTP 要求の受信時という名前の組み込み要求トリガー。
    アクション この ロジック アプリでローカル関数を呼び出すという名前の組み込みアクション。
    アクション 要求トリガーを使用する場合にのみ呼び出し元に応答するために使用する Response という名前の組み込み応答アクション
  3. デザイナーで、[ このロジック アプリでローカル関数を呼び出す] という名前のアクションを選択します。

    アクションの情報ウィンドウが開き、次に例を示すカスタム関数呼び出しを設定できます。

    既定のワークフローとそのトリガーとワークフロー デザイナーで開かれたアクションを示すスクリーンショット。

  4. 関数名パラメーターの値が、実行する関数に設定されていることを確認します。 関数で使用するその他のパラメーター値を確認または変更します。

5: コードとワークフローをデバッグする

  1. 次の各Azure Storage サービスについて、Azurite ストレージ エミュレーターを起動します。

    • Azure Blob Service
    • Azure キュー サービス
    • Azure Table Service
    1. Visual Studio Code View メニューから Command Palette を選択します。

    2. 表示されたプロンプトで、一覧から Azurite: Start Blob Service を選択します。

    3. 表示される作業ディレクトリの一覧から、ロジック アプリを選択します。

    4. [Azurite: Start Queue Service] (Azurite: Queue サービスの開始)[Azurite: Start Table Service] (Azurite: Table サービスの開始) に対して、これらの手順を繰り返します。

    成功した場合は、画面の下部にある Visual Studio Code タスク バーに、実行中の 3 つのストレージ サービスが表示されます。

  2. 次の手順に従って、ロジック アプリ プロジェクトと.NET関数プロジェクトの両方にデバッガーをアタッチします。

    1. Visual Studio Codeのアクティビティ バーで、Run と Debug (キーボード: Ctrl + Shift + D) を選択します。

      Visual Studio Code のアクティビティバーで「実行」と「デバッグ」が選択されているスクリーンショットが表示されています。

    2. [実行とデバッグ] の一覧で、[ローカル関数を使用したロジック アプリの実行/デバッグ] (<ロジック アプリ>) を選択し、[再生] (緑色の矢印) を選択します。

      スクリーンショットは、ローカル関数を使用した実行/デバッグ ロジック アプリの選択オプションを含む実行とデバッグの一覧を示しています。

      次のイベントが発生します。

      • [Terminal] (ターミナル) ウィンドウが開き、デバッグ プロセスが開始したことを示します。
      • デバッグ コンソール ウィンドウが開き、デバッグの状態が表示されます。
      • Visual Studio Codeの下部で、タスク バーがオレンジ色に変わり、.NET デバッガーが読み込まれたことを示します。
  3. ブレークポイントを設定するには、関数定義 (<function-name>.cs) またはワークフロー定義 (workflow.json) で、ブレークポイントが必要な行番号を見つけて、隣接する列を選択します。次に例を示します。

    コード内の行にブレークポイントが設定された開いている関数コード ファイルを示すスクリーンショット。

  4. ワークフローで要求トリガーを手動で実行するには、ワークフローの [概要] ページを開きます。

    1. ロジック アプリ プロジェクトから、 workflow.json ファイルのショートカット メニューを開き、[ 概要] を選択します。

      ワークフローの [概要] ページには、ワークフローを手動で開始する場合のために [トリガーの実行] ボタンが用意されています。 [Workflow Properties] (ワークフローのプロパティ)[コールバック URL] の値は、ワークフロー内の要求トリガーによって作成された呼び出し可能なエンドポイントの URL です。 この URL に要求を送信して、他のアプリ (他のロジック アプリ ワークフローなど) からワークフローをトリガーできます。

    2. [概要] ページのツール バーで、[トリガーの実行] を選択します。

      画面には、Visual Studio Codeとワークフローの開かれた概要ページが表示されます。

      ワークフローの実行が開始されると、デバッガーによって最初のブレークポイントがアクティブになります。

    3. [実行] メニューまたはデバッガーのツール バーで、デバッグ アクションを選択します。

    ワークフローの実行が完了すると、[概要] ページに、完了した実行とその実行に関する基本的な詳細が表示されます。

  5. ワークフロー実行の詳細を確認するには、完了した実行を選択します。 または、[実行時間] 列の横にある一覧から [Show run] (実行の表示) を選択します。

    スクリーンショットは、Visual Studio Codeとワークフローの実行が完了した状態を示しています。

6: コードをデプロイする

ロジック アプリ プロジェクトをデプロイするのと同じ方法でカスタム関数をデプロイします。 Visual Studio Codeからデプロイする場合でも、CI/CD DevOps プロセスを使用する場合でも、デプロイする前に必ずコードをビルドしてください。 また、展開する前に、すべての依存アセンブリが次のロジック アプリ プロジェクト フォルダーに存在することを確認します。

  • .NET 4.7.2: lib/custom/net472 フォルダー

  • .NET 8: lib/custom/net8 フォルダー

詳細については、「 Visual Studio Code から Azureを参照してください。

依存関係の挿入

.NET 8 を選択すると、Standard ワークフローのカスタム .NET コードでは、dependency injection (DI) がサポートされます。 この機能を使用すると、サービスを 1 回登録できるため、各関数内に依存関係を作成するのではなく、実行時にカスタム コード関数でサービスを自動的に使用できるようになります。

Visual Studio Codeでサポートされているのは、.NET 8のカスタムコードプロジェクトのみで、依存性注入が可能です。

依存関係の挿入がない場合、多くの場合、カスタム コード関数は次のようになります。

  • 関数内にサービス インスタンスを直接作成します。
  • 複数の関数またはワークフロー間でロジックを複製する。
  • ビジネス ロジックとセットアップ コードと構成コードを組み合わせて使用します。

ワークフローが拡大するにつれて、カスタム コードのテスト、再利用、保守が困難になります。 依存関係の挿入では、次のことができます。

  • ビジネス ロジックとワークフローの実行を分離します。
  • 複数のカスタム コード関数間で共有サービスを再利用します。
  • カスタム コードを標準の.NET開発パターンに合わせます。

カスタム コードは、特に複数のワークフローが同じロジックに依存している場合に、運用ワークフローでより管理しやすくなります。

依存関係の挿入を使用する場合

単純なカスタム コード関数または 1 回限りのカスタム コード関数がある場合は、おそらく依存関係の挿入は必要ありません。 ただし、カスタム コードに次の要件がある場合は、依存関係の挿入を使用する必要があります。

  • 複数のワークフローで、同じカスタム コード関数を使用または共有します。
  • カスタム コード関数には、時間の経過と同時に変化するビジネス ロジックまたはルーティング ロジックが含まれています。
  • より優れたテスト容易性または長期的な保守容易性が必要です。

依存関係の挿入がカスタム .NET関数に与える影響

依存関係の挿入では、カスタム .NET関数やワークフローの動作を呼び出す方法は変更されません。 この機能では、基になるカスタム コード構造のみが変更されますが、同じ結果が生成されます。 次の手順では、このプロセスについて説明します。

  1. Azure Logic Appsカスタム コード プロジェクトを読み込みます。
  2. Azure Logic Appsは、必要なサービスをインスタンス化し、登録し、関数に挿入します。
  3. この関数は、挿入された依存関係を使用して実行されます。

依存関係の挿入を有効にする

カスタム .NET コードで依存関係の挿入を使用するには、次の要件を満たします。

  1. カスタム コード プロジェクトを作成するときに、.NET 8 を選択します。

    依存関係の挿入をサポートするのは、.NET 8 個のカスタム コード プロジェクトのみです。

  2. プロジェクトで、依存関係の一覧を定義する StartupConfiguration クラスを追加します。 IConfigureStartup インターフェイスを実装し、IServiceCollectionを使用して依存関係を登録します。次に例を示します。

    using Microsoft.Azure.Functions.Extensions.Workflows;
    using Microsoft.Extensions.DependencyInjection;
    
    public class StartupConfiguration : IConfigureStartup
    {
        /// <summary>
        /// Configures services for the custom code function to use.
        /// </summary>
        /// <param name="services">The service collection to configure.</param>
        public void Configure(IServiceCollection services)
        {
            // Register the routing service with dependency injection
            services.AddSingleton<IRoutingService, OrderRoutingService>();
            services.AddSingleton<IDiscountService, DiscountService>();
        }
    }
    

    IConfigureStartup インターフェイスは、Microsoft.Extensions.DependencyInjection で定義されています。 詳細については、StartupConfiguration.csを参照してください。

  3. カスタム コード関数クラスコンストラクターで、登録されたサービスを、関数内に作成するのではなく、コンストラクター パラメーターとして定義して初期化します。次に例を示します。

    public class MySampleFunction
    {
        private readonly ILogger<MySampleFunction> logger;
        private readonly IRoutingService routingService;
        private readonly IDiscountService discountService;
    
        public MySampleFunction(ILoggerFactory loggerFactory, IRoutingService routingService, IDiscountService discountService)
        {
            this.logger = loggerFactory.CreateLogger<MySampleFunction>();
            this.routingService = routingService;
            this.discountService = discountService;
        }
    
        // Add your function logic here
    
    } 
    

カスタム コード プロジェクトをビルドして配置する以外に、依存関係の挿入を有効にするために、他の手順を実行したり、ワークフローを編集したり、Azure Logic Appsでその他のセットアップを変更したりする必要はありません。

詳細については、 カスタム コード依存関係挿入のサンプルを参照してください。

独自の NuGet パッケージを持ち込む

.NET 8 を使用する NuGet ベースのカスタム コード プロジェクトでは、言語ワーカー ホストによって使用される依存関係との競合を解決することなく、独自の NuGet パッケージを含めて管理できます。 アセンブリの依存関係をプロジェクト内の別のアセンブリの場所に直接追加するだけです。 次の例外を除き、プロジェクトに必要な.NET 8 互換の依存アセンブリ バージョンを用意できます。

  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft。Extensions.DependencyInjection.Abstractions
  • Microsoft.Azure.Functions.Extensions.Workflows.Abstractions

問題のトラブルシューティング

アクション情報ペインのエラー

ワークフロー デザイナーで、[Call a local function in this logic app] (このロジック アプリのローカル関数の呼び出し) という名前の組み込みアクションを選択すると、アクションの情報ペインに次のメッセージが表示されます。

Failed to retrieve dynamic inputs. Error details:

このシナリオでは、ロジック アプリ プロジェクトを調べて、 LogicApp\lib\custom フォルダーが空かどうかを確認します。 空の場合は、[ターミナル] メニューの [タスクの実行] を選択>関数をビルドします

No process with the specified name is currently running (指定された名前のプロセスは現在実行されていません)

ワークフローの実行時にこのエラー メッセージが表示される場合は、ロジック アプリではなく、デバッガー プロセスを .NET Functions にアタッチしている可能性があります。

この問題を修正するには、[Run and Debug] (実行とデバッグ) の一覧で、[Attach to logic app (LogicApp)] (ロジック アプリ (LogicApp) にアタッチ) を選択し、[再生] (緑色の三角) を選択します。

パッケージが正しくインポートされない

[出力] ウィンドウに次のようなエラーが表示される場合は、少なくとも .NET 6.0 がインストールされていることを確認します。 このバージョンがインストールされている場合は、アンインストールしてから再インストールしてみてください。

C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.targets(83,5): warning : The ExtensionsMetadataGenerator package was not imported correctly. Are you missing 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.targets' or 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.props'? [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] WeatherForecast -> C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\\bin\Debug\net472\WeatherForecast.dll C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : It was not possible to find any compatible framework version [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : The specified framework 'Microsoft.NETCore.App', version '6.0.0' was not found. [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : - Check application dependencies and target a framework version installed at: [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj]

ビルドの失敗

関数に変数が含まれていない場合、コードをビルドすると、出力ウィンドウに次のエラー メッセージが表示されることがあります。

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

Build FAILED.

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

0 Warning(s)
2 Error(s)

この問題を解決するには、コードの Run メソッドに次のパラメーターを追加します。

string parameter1 = null

次の例は、Run メソッドのシグネチャがどのように表示されるかを示しています。

public static Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale, string parameter1 = null)

Visual Studio Code を使用して Standard ロジック アプリ ワークフローを作成します