Проблемы с загрузкой сборки .NET 8 в Matlab R2023a

Я пытаюсь загрузить сборку динамической библиотеки .NET 8, C# в Matlab.

Я пробовал следующее:

  1. Создание библиотеки, зависящей от платформы. Это приводит к ошибке, которую Matlab не может найти System.Runtime

    Message: Could not load file or assembly 'System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
    Source: mscorlib
    HelpLink: None
    
  2. Создание автономной библиотеки. Кажется, это загружает некоторые сборки .NET 8, но в конечном итоге происходит сбой с ошибкой:

    Message: Could not load type 'System.Object' from assembly 'System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' because the parent does not exist.
    Source: mscorlib
    HelpLink: None
    
  3. Создание автономной библиотеки, совместимой с AOT. Это вызывает следующую ошибку. Файл DLL, упомянутый в предупреждении, является DLL моего библиотечного проекта.

    Message: Could not load file or assembly 'file:///<DllFilePath>' or one of its dependencies. The module was expected to contain an assembly manifest.
    Source: mscorlib
    HelpLink: None
    

После попытки загрузки (любой из загрузок) я проверяю среду .NET в Matlab и получаю следующее:

>> dotnetenv

ans = 

  NETEnvironment with properties:

            Runtime: framework
             Status: loaded
            Version: ".NET Framework 4.0.30319.42000"
    RuntimeLocation: "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\"

Почему загружается .NET Framework, если сборка .NET 8?

Поскольку ошибка возникает во время загрузки, отладчику Visual Studio не к чему прикрепиться, чтобы использовать что-то вроде AssemblyResolve. Я скачал Fusion++ и пытался диагностировать, как Matlab пытается загрузить эти сборки.

Мне интересно, является ли загрузка пространства имен System по частичному имени частью проблемы. Возможно ли, что, поскольку он не полностью квалифицирован, он находит сборку .NET Framework в GAC, а не использует сборку .NET 8, поставляемую с библиотекой? Есть ли способ направить загрузчик Matlab на правильную сборку?

Вот выдержка из журнала Fusion для пространства имен System.

*** Assembly Binder Log Entry  (5/9/2024 @ 12:46:00) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable  <MatlabDir>\MATLAB\64_bit\R2023a\bin\win64\MATLAB.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = System
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: System | Domain ID: 1
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///<MatlabDir>/MATLAB/64_bit/R2023a/bin/win64/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = MATLAB.exe
Calling assembly : dotnetcli, Version=1.0.8570.32197, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: <MatlabDir>\MATLAB\64_bit\R2023a\bin\win64\MATLAB.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///<MatlabDir>/MATLAB/64_bit/R2023a/bin/win64/System.DLL.
LOG: Attempting download of new URL file:///<MatlabDir>/MATLAB/64_bit/R2023a/bin/win64/System/System.DLL.
LOG: Assembly download was successful. Attempting setup of file: <MatlabDir>\MATLAB\64_bit\R2023a\bin\win64\System\System.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
LOG: A partially-specified assembly bind succeeded from the application directory. Need to re-apply policy.
LOG: Using application configuration file: <MatlabDir>\MATLAB\64_bit\R2023a\bin\win64\MATLAB.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
LOG: Found assembly by looking in the GAC.
LOG: Binding succeeds. Returns assembly from C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll.
LOG: Assembly is loaded in default load context.
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вызовите dotnetenv("core") перед добавлением сборки.

Большое спасибо. Я пробежал мимо того факта, что dotnetenv может изменить окружающую среду, а не просто сообщить об этом.

BoilermakerRV 10.05.2024 13:39

Куда идет этот звонок?

SPlatten 14.06.2024 09:20

Другие вопросы по теме