主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 .NET 程序集编译器打包 MATLAB 函数

支持的平台: Windows®

此示例演示了如何使用 .NET 程序集编译器将 MATLAB® 函数打包到 .NET 程序集。提供的 .NET 应用程序演示了如何通过 MATLAB 数据 API 在 MATLAB 函数和 .NET 应用程序之间传递矩阵。

在 R2025a 之前的版本中: 使用库编译器创建 .NET 程序集,具体操作请参阅生成 .NET 程序集并构建 .NET 应用程序 (R2024b)

前提条件

  • 请确认您已安装与 MATLAB Compiler SDK™ 兼容的 .NET 编译器。有关详细信息,请参阅MATLAB Compiler SDK .NET 目标要求

  • 最终用户必须安装 MATLAB Runtime 才能运行应用程序。有关详细信息,请参阅下载并安装 MATLAB Runtime

    出于测试目的,您可以使用安装的 MATLAB 来代替 MATLAB Runtime

创建 MATLAB 函数

在 MATLAB 中,检查您想要打包的 MATLAB 代码。在此示例中,请在名为 MagicProject 的新文件夹中创建一个名为 magicsquare.m 的 MATLAB 函数。

function y = magicsquare(x)
y = magic(x);

在 MATLAB 命令提示符下,输入 magicsquare(5)

输出是一个 5×5 矩阵。

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

创建工程和编译任务

使用 .NET 程序集编译器创建 .NET 程序集的编译器任务。编译器任务允许您为特定部署目标编译工程中的文件。

要打开该 App,在 App 选项卡上,展开 App 图库。在应用程序部署部分,点击.NET 程序集编译器

Application Deployment section of the Apps gallery

您还可以在 MATLAB 命令行窗口中使用 dotNetAssemblyCompiler 函数打开该 App。

打开 App 后,“创建编译器任务”对话框会提示您将任务添加到新的或现有 MATLAB 工程中。在此示例中,选择启动新工程并创建编译器任务,并在 MagicProject 文件夹中创建一个名为 MagicProject 的新工程。有关创建和使用 MATLAB 工程的详细信息,请参阅创建工程

Create compiler task dialog box with the text 'To deploy your MATLAB code, you need a MATLAB project to organize code and a compiler task to handle deployment.' The option 'Start a new project and create a compiler task' is selected.

编辑器中打开了一个名为 DotNETAssembly1 的新编译任务。

您可以通过打开编译器任务管理器或转到管理任务选项卡并创建一个新的编译器任务来创建更多 .NET 编译器任务或为其他部署目标打包代码。

指定编译选项

在打包之前,您可以为 .NET 组件及其安装程序指定选项,以自定义构建和打包过程。例如,您可以混淆处理 MATLAB 代码,或指定在生成的安装程序中包含 MATLAB Runtime 的方法。

将 MATLAB 函数添加到 .NET 程序集。所有文件必须位于工程根文件夹中才能添加到工程中。在此示例中,在编译器任务的导出的函数部分,点击添加导出的函数,然后选择 magicsquare.m。在“工程”面板中,该文件现在带有标签 DesignExported Function File

Exported file section of the compiler task with no file selected and a button labeled Add Exported Function

.NET 程序集信息部分,将字符串 MyDotNetAssembly 替换为您的 .NET 程序集名称,即 magicsquarelib

要为生成的文件选择不同的输出位置,请更新输出位置部分中的路径。

.NET API 选择部分,选择用于在 .NET 应用程序与 MATLAB 函数之间交换数据的 API。对于此示例,请选择 MATLAB 数据 API。有关详细信息,请参阅选择 .NET 部署选项

.NET API Selection section with the option 'Create interface that uses the MATLAB Data API for .NET' selected

创建示例代码(可选)

MATLAB Compiler SDK 可以生成示例 .NET 代码,演示如何调用您导出的 MATLAB 函数。您可以使用示例来实现您自己的应用程序或者测试编译后的工件。如果您编写自己的 .NET 应用程序代码,可以在打包 MATLAB 函数后将其移动到适当的目录中。有关详细信息,请参阅创建示例代码来调用导出函数

要创建一个示例 MATLAB 文件,请点击示例部分中的创建新示例。选择文件 magicsquare.m。一个 MATLAB 实时脚本已为您打开,供您编辑。在编辑采样输入下,输入值 5,然后保存文件。文件 sampleFiles\magicsquareSample1.mlx 被添加到任务的示例部分。

查看代码和打包 .NET 程序集

要查看包含有关构建和打包组件的说明的代码,请点击导出编译脚本旁边的箭头,然后选择显示代码。在右侧,一个窗口显示了一个部署脚本,其中包含与您的构建选项相对应的 compiler.build.dotNETAssemblycompiler.package.installer 函数。您可以通过点击导出编译脚本按钮将此代码转换为 MATLAB 脚本文件。运行生成的构建脚本与点击编译和打包按钮等效。

Two buttons labeled Export Build Script and Build and Package

要创建 .NET 组件和安装程序,请点击编译和打包。要仅创建 .NET 组件,请点击编译和打包旁边的箭头,然后选择编译

编译器会在工程文件夹中的 <compiler_task_name>/output 文件夹中生成文件。整合过程中使用的关键文件是包含 MATLAB 代码的代码存档(.ctf 文件)。有关其他文件的信息,请参阅打包 MATLAB 函数后生成的文件

如果您创建了安装程序,package 子文件夹中包含您的共享库文件的安装程序以及 MATLAB 运行时

小心

生成的安装程序不包含.NET 应用程序可执行文件。您必须在打包后编译您的 .NET 应用程序。然后,手动分发应用程序文件以及 MATLAB Runtime,或者使用 compiler.package.installerAdditionalFiles 选项将可执行文件包含在安装程序中。有关详细信息,请参阅将 MATLAB Compiler SDK 文件分发给应用程序开发人员

MATLAB 代码存档集成到 .NET 应用程序中

创建 .NET 程序集后,在您首选的 .NET 开发环境中编写 .NET 应用程序的源代码。有关详细信息,请参阅设置 .NET 开发环境

如果您在打包前创建了示例代码,MATLAB Compiler SDK 会在 samples 文件夹中生成一个名为 magicsquareSample1.cs 的示例 C# .NET 应用程序。

 magicsquareSample1.cs

矩阵应用程序执行以下操作:

  • 使用 try-catch 模块处理异常。

  • 创建一个 MWNumericArray 数组来存储输入数据。

  • 实例化 Class1 对象 results

  • 调用 magicsquare 方法,其中第一个参数指定输出参量的数量,后续参数按顺序作为输入参量传递给函数。

  • 将函数的输出写入控制台。

编写源代码后,构建并运行您的 .NET 应用程序。

在系统命令提示符下,导航到工程文件夹,使用 dotnet 命令创建一个 .NET 工程文件。

dotnet new console --name magicsquarelib

此命令创建一个名为 magicsquarelib 的文件夹,其中包含:

  • obj 文件夹

  • magicsquarelib.csproj 工程文件

  • Program.cs C# 源文件,您应将其替换为 magicsquareSample1.cs

将生成的代码存档 magicsquarelib.ctf 从输出文件夹复制并粘贴到包含您的 .NET 工程的新文件夹 magicsquarelib 中,并将示例应用程序 magicsquareSample1.cssamples 文件夹复制并粘贴到新文件夹中。

删除 Program.cs 文件。

在文本编辑器中打开工程文件 magicsquarelib.csproj,并在工程的 <ItemGroup> 标记中使用 <Reference> 标记包含这些程序集:

  • MathWorks.MATLAB.Runtime.dll

  • MathWorks.MATLAB.Types.dll

magicsquarelib.ctf 代码存档文件作为内容文件添加进 <ItemGroup> 标记。

添加标记 CopyToPublishDirectory 并将其设置为 Always。此步骤确保将 magicsquarelib.ctf 文件复制到此工程发布到的跨平台文件夹中。

添加引用后,您的工程文件将类似于以下文件。

 magicsquarelib.csproj

在命令行中,输入以下命令构建工程:

dotnet build magicsquarelib.csproj

从系统命令提示符运行应用程序。例如,在 Windows 中,导航到包含可执行文件的文件夹,并输入以下命令:

dotnet run

要在部署前在 MATLAB 中测试应用程序,请使用 bang(!) 运算符运行应用程序。例如,!dotnet run

该应用程序返回与您在打包过程中创建的示例 MATLAB 代码相同的输出。

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

要在 MATLAB 外部运行.NET 应用程序,您必须安装 MATLAB 运行时。有关详细信息,请参阅下载并安装 MATLAB Runtime。如果您使用编译和打包创建了安装程序,该安装程序包含与用于编译 .NET 程序集的 MATLAB 版本相匹配的 MATLAB 运行时版本。

要部署 .NET 应用程序,请将可执行文件分发给最终用户。

另请参阅

| |

主题