メインコンテンツ

MWArray API を使用したクロスプラットフォームの .NET 6.0 アプリケーションへの MATLAB 関数のデプロイ

サポートされるプラットフォーム: Windows® (オーサリング)、Linux® (実行)、macOS (実行)。

この例では、.NET アセンブリ コンパイラを使用して .NET アセンブリを作成し、それを Linux または macOS で実行できる .NET 6.0 アプリケーションに統合する方法を説明します。

前提条件

  1. MATLAB® 検索パスで認識される新しい作業フォルダーを作成します。この例では、新しい作業フォルダーとして C:\Work を使用しています。

  2. .NET アプリケーションを実行する予定の Windows プラットフォームと追加のプラットフォームに MATLAB Runtime をインストールします。詳細については、MATLAB Runtime のダウンロードとインストールを参照してください。

  3. Linux プラットフォームおよび macOS プラットフォームの場合、MATLAB Runtime のインストール後に環境変数 LD_LIBRARY_PATH と環境変数 DYLD_LIBRARY_PATH をそれぞれ設定する必要があります。詳細については、デプロイ用の MATLAB Runtime パスの設定を参照してください。

  4. .NET 6.0 SDK 以降または Microsoft® Visual Studio® 2022 (v17.0 以降) がインストールされていることを確認します。.NET 6.0 がインストールされているかどうかは、システムのコマンド プロンプトで「dotnet --info」と入力して確認できます。オペレーティング システムに固有の .NET SDK のバージョンは https://dotnet.microsoft.com/download からダウンロードできます。

MATLAB 関数の作成

次のコードを使用して、mymagic.m という名前の MATLAB ファイルを作成します。

function out = mymagic(in)
out = magic(in);
MATLAB 関数をコマンド プロンプトでテストします。
y = mymagic(3)
y =
     8     1     6
     3     5     7
     4     9     2

.NET アセンブリの作成

関数 compiler.build.dotNETAssembly を使用して .NET アセンブリを作成します。

buildResults = compiler.build.dotNETAssembly("mymagic.m",...
Interface="mwarray",...
Verbose="on", ...
AssemblyName="MyMatrixFunctions", ...
ClassName="MyMagic", ...
OutputDir=".\output")

AssemblyName プロパティでアセンブリの名前を指定するのは必須ではありませんが、指定することを強く推奨します。そうすることで、生成される .NET アセンブリの名前空間がより明確になります。ルートの名前空間がない場合、下位の名前空間に example という名前で自動的に付加されるため、名前空間構造が煩雑になって混乱を招く可能性があります。

以下に列挙された一連のファイルが関数によって生成され、指定した出力ディレクトリに配置されます。

P:\MATLAB\WORK\OUTPUT
    GettingStarted.html
    includedSupportPackages.txt
    mccExcludedFiles.log
    MyMagic.cs
    MyMagicNative.cs
    MyMatrixFunctions.dll
    MyMatrixFunctions.xml
    MyMatrixFunctionsNative.dll
    MyMatrixFunctionsNative.xml
    MyMatrixFunctionsVersion.cs
    MyMatrixFunctions_overview.html
    readme.txt
    requiredMCRProducts.txt
    unresolvedSymbols.txt

No subfolders exist

.NET アプリケーションへの MATLAB コードの統合

  1. Windows でコマンド プロンプトを開き、この例で使用している work フォルダーに移動します。

  2. コマンド ラインに以下を入力します。

    dotnet new console --framework net6.0 --name MyMagicConsoleApp

    これにより、次の内容をもつ MyMagicConsoleApp という名前のフォルダーが作成されます。

    • obj フォルダー

    • MyMagicConsoleApp.csproj プロジェクト ファイル

    • Program.cs C# ソース ファイル

  3. プロジェクト ファイルをテキスト エディターで開きます。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
    </Project>

    <ItemGroup> タグを使用して、プロジェクトに以下の参照を追加します。

    • 関数 compiler.build.dotNETAssembly によって作成された .NET アセンブリ ファイル MyMatrixFunctions.dll

    • .NET アセンブリ ファイル MWArray.dll の依存関係。

      MATLAB がシステムにインストールされている場合

      • matlabroot\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll

      MATLAB Runtime がシステムにインストールされている場合

      • <MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll

    参照を追加すると、プロジェクト ファイルは次のようになります。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
        <ItemGroup>
        <Reference Include="MyMatrixFunctions">
          <HintPath>P:\MATLAB\work\output\MyMatrixFunctions.dll</HintPath>
    	  <!--Path to .NET Assembly created by compiler.build.dotNETAssembly function-->
        </Reference>
        <Reference Include="MWArray">
          <HintPath>C:\Program Files\MATLAB\R2025b\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll</HintPath>
    	  <!--Path to MWArray.dll in the MATLAB-->
        </Reference>
      </ItemGroup>
    </Project>
  4. C# ファイル Program.cs のコードを次のコードに置き換えます。

     Program.cs

     Program.cs (macOS)

    通常の C# アプリケーション コードと macOS バージョンの違いは、macOS バージョンでは、新しく作成した MyMainFunc という関数に Main メソッドの元の内容を含めていることです。元の Main メソッドでは、単に MyMainFunc とコマンド ライン引数をパラメーターとして使用して MWMCR.setupMacRunLoopAndRun メソッドを呼び出しています。

    macOS 環境には MWMCR.setupMacRunLoopAndRun が不可欠です。これにより、ユーザー入力やタイマー イベントなどのイベントを処理するための macOS 固有のメカニズムである Core Foundation Run Loop (CFRunLoop) を MATLAB で操作できるようになるからです。MATLAB はイベント管理で CFRunLoop に依存しますが、macOS の .NET 6.0 または .NET Core アプリケーションのメイン スレッドでは既定では設定されないため、MWMCR.setupMacRunLoopAndRun でステップインして CFRunLoop を確立します。これにより、macOS で実行する .NET 6.0 または .NET Core アプリケーション内への MATLAB 関数のシームレスな統合が確立され、潜在的なイベント処理の問題を回避できます。

    メモ

    MWMCR.setupMacRunLoopAndRun を使用する必要があるのは、C# アプリケーションを macOS で開発または実行する場合のみです。

  5. コマンド ラインに以下を入力して、プロジェクトをビルドします。

    dotnet build MyMagicConsoleApp.csproj

C# アプリケーションの実行

テスト目的で、MATLAB コマンド プロンプトからアプリケーションを実行できます。これには MATLAB Runtime は必要ありません。MATLAB コマンド プロンプトで、実行可能ファイルが格納されているディレクトリに移動し、以下を入力してアプリケーションを実行します。

!dotnet run -- 3
アプリケーションにより、魔方陣行列が表示されます。
Magic square of order 3

     8     1     6
     3     5     7
     4     9     2 

Magic square as native array:
 
Element(0,0)= 8 
Element(0,1)= 1 
Element(0,2)= 6 
Element(1,0)= 3 
Element(1,1)= 5 
Element(1,2)= 7 
Element(2,0)= 4 
Element(2,1)= 9 
Element(2,2)= 2 

Visual Studio を使用した統合

対話式のコマンド ラインによって .NET アプリケーションを作成する方法の代わりに、Microsoft Visual Studio を使用して .NET アプリケーションを作成することもできます。上記の手順を使用して .NET アプリケーションが既に作成されている場合は、このセクションを省略できます。

  1. Visual Studio を開き、MyMagicConsoleApp という名前の C# コンソール アプリを作成します。詳細については、Visual Studio を使用して .NET コンソール アプリケーションを作成する"アプリを作成する" セクションを参照してください。

  2. .NET 6.0 (Long-term support) をフレームワークとして選択します。

  3. 既定で生成される Program.cs ファイルのソース コードを、この例のページにある Program.cs ファイルで提供された固有のソース コードに置き換えます。

  4. [ソリューション エクスプローラー] で、プロジェクト名を右クリックして、[追加][プロジェクト参照] を選択します。[参照マネージャー] ウィンドウで [参照] をクリックし、以下の参照を追加します。

    • 関数 compiler.build.dotNETAssembly によって作成された .NET アセンブリ ファイル MyMatrixFunctions.dll

    • .NET アセンブリ ファイル MWArray.dll の依存関係。

      MATLAB がシステムにインストールされている場合

      • matlabroot\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll

      MATLAB Runtime がシステムにインストールされている場合

      • <MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll

  5. アプリケーションをビルドします。

Linux および macOS へのパブリッシュ

  • アプリケーションを Linux にパブリッシュするには、システムのコマンド プロンプトに次のコマンドを 1 行で入力します。

    dotnet publish --configuration Release --framework net6.0 
      --runtime linux-x64 --self-contained true MyMagicConsoleApp.csproj

  • アプリケーションを macOS にパブリッシュするには、次のコマンドを 1 行で入力します。

    dotnet publish --configuration Release --framework net6.0 
      --runtime osx.10.11-x64 --self-contained true MyMagicConsoleApp.csproj

    特定のプラットフォームにパブリッシュするには、該当するランタイム識別子 (RID) を使用します。詳細については、https://learn.microsoft.com/en-us/dotnet/core/rid-catalog を参照してください。

Linux での .NET アプリケーションの実行

  1. Release フォルダーを、Windows の ...\work\MyMagicConsoleApp\bin から Linux または macOS マシンの ~/work にコピーします。

  2. Linux マシンで、MATLAB Runtime がインストールされていることを確認し、ライブラリ パス環境変数を設定します。詳細については、前提条件を参照してください。

  3. コマンド シェルを開き、次に移動します。

    ~/work/Release/net6.0/<os-architecture>/publish
  4. 次を入力して、.NET アプリケーションを実行します。

    ./MyMagicConsoleApp 3
    Magic square of order 3
    
         8     1     6
         3     5     7
         4     9     2
    
    Magic square as native array:
    
    Element(0,0)= 8
    Element(0,1)= 1
    Element(0,2)= 6
    Element(1,0)= 3
    Element(1,1)= 5
    Element(1,2)= 7
    Element(2,0)= 4
    Element(2,1)= 9
    Element(2,2)= 2
    

参考

| |

トピック