Урок 4 — выгрузка расширения во время работы CAM-системы
Цели
- Создать простое работающее расширение на C#;
- Рассмотреть способы выгрузки расширений.
Практическая часть
Порядок действий:
- Запустите CAM-систему: список утилит будет изменяться во время её работы.
- Откройте репозиторий GitVerse и клонируйте его.
- Найдите каталог
GCodeGeneration\ExtensionUtilityNCMakerNet— он послужит основой расширения. - Код расширения уже готов. В этом уроке изменяется только файл конфигурации.
- Откройте и соберите .NET-проект. Должен появиться файл
bin/debug/ExtensionUtilityNcMakerNet.dll; - Скопируйте
ExtensionUtilityNcMakerNet.settings.jsonвbin/debug/; - Установите расширение в первый раз:
- Поместите DLL и
settings.jsonв архив с расширением.dext; - Запустите созданный файл
.dext, чтобы добавить расширение в CAM-систему. Параметрunload_modeне задан, поэтому используется значение по умолчаниюumJustAfterExecution;
- Поместите DLL и
- В меню утилит CAM-системы выберите
Generate G code by C#, затем закройте Блокнот с результатами. - Не закрывая CAM-систему, установите расширение во второй раз:
- Измените
bin/debug/ExtensionUtilityNcMakerNet.settings.json:- Задайте режим выгрузки
umManuallyFromUI; - Измените подпись пункта меню;
{ "name": "Extension on C# to generate G code", "description": "Extension on C# to generate G code", "module_path": "${extensionJsonFolder}/ExtensionUtilityNcMakerNet.dll", "unload_mode": "umManuallyFromUI", "extensions": [ { "utility": { "name": "Generate G code by C#", "caption": "Generate G code by C# (version 2)", "id": "Extension.Utility.NcMaker.Net" } } ] } - Задайте режим выгрузки
- Поместите JSON-файл и DLL в архив с расширением
.dext; - Запустите файл
.dext, чтобы установить расширение. DLL будет перезаписана, поскольку она была выгружена. Если библиотека остаётся загруженной, возникнет ошибка; - Откройте меню утилит CAM-системы. В нём должен появиться пункт
Generate G code by C# (version 2). Новая подпись означает, что расширение обновлено; - Выберите
Generate G code by C# (version 2)и закройте Блокнот с результатами; - Повторно запустите созданный ранее файл
.dext. Появится ошибкаAccess to the path 'ExtensionUtilityNcMakerNet.dll' is denied: расширение осталось в памяти, как и предусмотрено режимомumManuallyFromUI; - Выгрузите расширение вручную через интерфейс:
- Откройте
Settings→Extensions; - Выберите
Generate G code by C#— значение поляnameизsettings.json; - Нажмите
unload. После успешной выгрузки кнопка станет недоступной; при неудаче появится ошибка;
- Откройте
- Снова запустите файл
.dext. Теперь установка пройдёт успешно, поскольку расширение выгружено вручную;
- Измените
- Не закрывая CAM-систему, установите расширение в третий раз:
- Измените
bin/debug/ExtensionUtilityNcMakerNet.settings.json:- Задайте режим выгрузки
umBeforeProgramFinalization; - Измените подпись пункта меню;
{ "name": "Extension on C# to generate G code", "description": "Extension on C# to generate G code", "module_path": "${extensionJsonFolder}/ExtensionUtilityNcMakerNet.dll", "unload_mode": "umBeforeProgramFinalization", "extensions": [ { "utility": { "name": "Generate G code by C#", "caption": "Generate G code by C# (version 3)", "id": "Extension.Utility.NcMaker.Net" } } ] } - Задайте режим выгрузки
- Поместите JSON-файл и DLL в архив с расширением
.dext; - Запустите созданный файл
.dext, чтобы установить расширение; - Откройте меню утилит CAM-системы. В нём должен появиться пункт
Generate G code by C# (version 3), подтверждающий обновление подписи; - Выполните команду расширения и закройте Блокнот с результатами;
- Повторно запустите созданный ранее файл
.dext. Появится ошибкаAccess to the path 'ExtensionUtilityNcMakerNet.dll' is denied; - Проверьте возможность ручной выгрузки через интерфейс:
- Откройте
Settings→Extensions; - Выберите
Generate G code by C#— значение поляnameизsettings.json; - Убедитесь, что кнопка
unloadнедоступна. РежимumBeforeProgramFinalizationзапрещает ручную выгрузку;
- Откройте
- Измените
- Закройте CAM-систему и запустите файл
.dext. Библиотека выгружается из памяти при завершении CAM-системы, поэтому теперь её можно обновить.