使用 MWArray API 将 MATLAB 函数部署到跨平台 .NET 6.0 应用程序
支持的平台:Windows®(编写)、Linux®(执行),macOS(执行)。
此示例演示了如何使用 .NET 程序集编译器创建一个 .NET 程序集,并将其集成到一个可在 Linux 或 macOS 上运行的 .NET 6.0 应用程序中。
前提条件
创建一个对 MATLAB® 搜索路径可见的新工作文件夹。此示例使用
C:\Work
作为新工作文件夹。在 Windows 和您计划运行 .NET 应用程序的其他平台上安装 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 或更高版本)。您可以在系统命令提示符下输入
dotnet --info
来验证 .NET 6.0 是否已安装。您可以从 https://dotnet.microsoft.com/download 下载特定于您的操作系统的 .NET SDK 版本。
创建 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
将 MATLAB 代码集成到 .NET 应用程序中
在 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
函数创建的MyMatrixFunctions.dll
.NET 程序集文件。MWArray.dll
.NET 程序集文件依赖关系。如果您的系统上安装了 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\R2025a\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll</HintPath> <!--Path to MWArray.dll in the MATLAB--> </Reference> </ItemGroup> </Project>
将
Program.cs
C# 文件中的代码替换为以下代码:常规 C# 应用程序代码和 macOS 版本之间的区别在于,
Main
方法的原始内容现在位于 macOS 版本中名为MyMainFunc
新创建的函数中。原始的Main
方法现在只是使用MWMCR.setupMacRunLoopAndRun
和命令行参量作为参数调用MyMainFunc
方法。MWMCR.setupMacRunLoopAndRun
对于 macOS 环境来说是不可或缺的,因为它允许 MATLAB 与核心基础运行循环 (CFRunLoop) 交互,这是一种用于处理用户输入或计时器事件等事件的 macOS 特定机制。由于 macOS 上的 .NET 6.0 或 .NET Core 应用程序默认不会在主线程上设置 CFRunLoop(MATLAB 依赖它进行事件管理),因此MWMCR.setupMacRunLoopAndRun
介入建立 CFRunLoop。这可确保 MATLAB 函数与在 macOS 上运行的 .NET 6.0 或 .NET Core 应用程序无缝集成,从而防止潜在的事件处理问题。注意
仅当您在 macOS 上开发或运行 C# 应用程序时才需要使用
MWMCR.setupMacRunLoopAndRun
。在命令行中,输入以下命令来构建您的工程:
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# 控制台 App。有关详细信息,请参阅使用 Visual Studio 创建 .NET 控制台应用程序中的创建应用程序部分。选择
.NET 6.0 (Long-term support)
作为框架。将
Program.cs
文件中默认生成的源代码替换为此示例页面中的Program.cs
文件中提供的特定源代码。在 Solution Explorer 中,右键点击工程名称,然后选择 Add > Project Reference。在 Reference Manager 窗口中,点击 Browse 并添加以下引用:
由
compiler.build.dotNETAssembly
函数创建的MyMatrixFunctions.dll
.NET 程序集文件。MWArray.dll
.NET 程序集文件依赖关系。如果您的系统上安装了 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,请在系统命令提示符下输入以下命令:
dotnet publish --configuration Release --framework net6.0 --runtime linux-x64 --self-contained true MyMagicConsoleApp.csproj
要将应用程序发布到 macOS,请在一行中输入以下命令:
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 并设置了库路径环境变量。有关详细信息,请参阅前提条件。
打开命令 shell 并导航到:
~/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