MWArray API を使用したクロスプラットフォームの .NET 6.0 アプリケーションへの MATLAB 関数のデプロイ
サポートされるプラットフォーム: Windows® (オーサリング)、Linux® (実行)、macOS (実行)。
この例では、.NET アセンブリ コンパイラを使用して .NET アセンブリを作成し、それを Linux または macOS で実行できる .NET 6.0 アプリケーションに統合する方法を説明します。
前提条件
MATLAB® 検索パスで認識される新しい作業フォルダーを作成します。この例では、新しい作業フォルダーとして
C:\Work
を使用しています。.NET アプリケーションを実行する予定の Windows プラットフォームと追加のプラットフォームに MATLAB Runtime をインストールします。詳細については、MATLAB Runtime のダウンロードとインストールを参照してください。
Linux プラットフォームおよび macOS プラットフォームの場合、MATLAB Runtime のインストール後に環境変数
LD_LIBRARY_PATH
と環境変数DYLD_LIBRARY_PATH
をそれぞれ設定する必要があります。詳細については、デプロイ用の MATLAB Runtime パスの設定を参照してください。.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);
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 コードの統合
Windows でコマンド プロンプトを開き、この例で使用している
work
フォルダーに移動します。コマンド ラインに以下を入力します。
dotnet new console --framework net6.0 --name MyMagicConsoleApp
これにより、次の内容をもつ
MyMagicConsoleApp
という名前のフォルダーが作成されます。obj
フォルダーMyMagicConsoleApp.csproj
プロジェクト ファイルProgram.cs
C# ソース ファイル
プロジェクト ファイルをテキスト エディターで開きます。
<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>
C# ファイル
Program.cs
のコードを次のコードに置き換えます。通常の 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 で開発または実行する場合のみです。コマンド ラインに以下を入力して、プロジェクトをビルドします。
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 アプリケーションが既に作成されている場合は、このセクションを省略できます。
Visual Studio を開き、
MyMagicConsoleApp
という名前の C# コンソール アプリを作成します。詳細については、Visual Studio を使用して .NET コンソール アプリケーションを作成するの "アプリを作成する" セクションを参照してください。.NET 6.0 (Long-term support)
をフレームワークとして選択します。既定で生成される
Program.cs
ファイルのソース コードを、この例のページにあるProgram.cs
ファイルで提供された固有のソース コードに置き換えます。[ソリューション エクスプローラー] で、プロジェクト名を右クリックして、[追加]、[プロジェクト参照] を選択します。[参照マネージャー] ウィンドウで [参照] をクリックし、以下の参照を追加します。
関数
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
アプリケーションをビルドします。
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 アプリケーションの実行
Release
フォルダーを、Windows の...\work\MyMagicConsoleApp\bin
から Linux または macOS マシンの~/work
にコピーします。Linux マシンで、MATLAB Runtime がインストールされていることを確認し、ライブラリ パス環境変数を設定します。詳細については、前提条件を参照してください。
コマンド シェルを開き、次に移動します。
~/work/Release/net6.0/<os-architecture>/publish
次を入力して、.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
参考
compiler.build.dotNETAssembly
| compiler.build.DotNETAssemblyOptions
| compiler.package.installer