Про создание nuget-пакетов под nanoCAD.
Я уже год (а то и больше) прошу у нанодевов предоставить nuget-пакеты для разработки хотя б под нанокад. Молчат, как рыбы об лед...
Статейка - расшифровка части видео от Ivan Soldatov, выполненного фактически по моей просьбе. За что автору видео огромное спасибо (если что, в телеге найти возможно в неофициальном чате по программированию под nanoCAD). Под катом - как я пробовал все это реализовать под nanoCAD для Windows. Самому даже интересно, что получится и в каком это будет виде
Для начала - надо либо иметь установленный nanoCAD, либо быть участником клуба разработчиков. Во втором случае нужно будет скачать соответствующий SDK для nanoCAD и распаковать его "куда-нибудь на винт". Ну или использовать библиотеки установленного nanoCAD.
Напоминаю: для версий до 23.0 используется не NET6, а NetFramework (по крайней мере по заявлениям nanodev), так что описываемый вариант там вряд ли будет работать. Проверять не хочу, да и необходимости особой у меня нет.
Итак, лично у меня на данный момент на машине болтаются SDK для nanoCAD23, 23.1, 24 - и все они валяются в c:\SDK: c:\SDK\nano23, c:\SDK\nano23.1, c:\SDK\nano24
Согласно видео - надо скачать утилиту nuget.exe (говорят, на просторах ынтырнетов найти не есть проблема, но, учитывая всю движуху вокруг и около, последнюю на данный момент версию на сайт я скинул.
Теперь создаю где-то там на винте отдельный каталог типа c:\nuget с подкаталогами для 23, 23.1, 24 версий nanoCAD (ну и, может, и для дальнейших версий - не суть). Для примера буду рассматривать вариант 23.1 - поскольку именно эта версия мне "горит" по работе. Именно в этот подкаталог я копирую файл hostdbmdg.dll, hostmgd.dll из SDK (подкаталог \include-x64) и ncadauto.dll из каталога установки nanoCAD23.1 (подкаталог \bin). Принципиально пока делаю без подключения MultiCAD.
Рядышком же бросаю тот самый nuget.exe.
Теперь в этом же каталоге создаю текстовый файл nc.nuspec, открываю его в Notepad++ и вбиваю туда некоторые данные (подробнее см. https://learn.microsoft.com/ru-ru/nuget/reference/nuspec):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xml version="1.0" encoding="utf-8"?> <package> <metadata> <id>nanoCadCore23.1.NET</id> <version>1.0.0</version> <authors>Ivanco,kpblc</authors> <requireLicenseAcceptance>false</requireLicenseAcceptance> <license type="expression">MIT</license> <description>Non official package for nanoCAD core</description> <releaseNotes>Initial release</releaseNotes> <copyright>$copyright</copyright> <tags>nanoCAD,nanoCADAPI,nanoCADCore</tags> <dependencies> <group targetFramework="net6.0"/> </dependencies> </metadata> <files> <file src="hostdbmgd.dll" target="lib/net6.0"/> <file src="hostmgd.dll" target="lib/net6.0"/> <file src="ncauto.dll" target="lib/net6.0"/> </files> </package> |
Файл, естественно, можно создавать хоть в блокноте, хоть в Notepad++, хоть в VSCode, хоть где.
Дальше любым способом вызываем ком.строку Windows в каталоге, где болтается все для построение nuget-пакета. И даю команду
1 |
nuget pack |
... и на выходе получаю какой-то файл типа nanoCadCore23.1.NET.1.0.0.nupkg
Ок, кидаю его куда-то на сетевой ресурс, и теперь стартую отдельную машину, где есть только Windows и VS. На этой машине создаю новый проект VS - библиотеку классов ncad231lib, для NET6.
По ходу дела настраиваю получение nuget-пакетов, как это было показано в видео - чтоб созданный пакет вообще был виден. И пишу код типа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using HostMgd.ApplicationServices; using HostMgd.EditorInput; using Teigha.Runtime; namespace ncad231lib { public static class TestCommand { [CommandMethod("test")] public static void TestCmd() { Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; ed.WriteMessage("\nTest command"); } } } |
Момент номер раз - все подхватывается без дополнений типа ReSharper.
Момент номер два - приложение собирается, что само по себе уже как минимум радует.
Момент номер три - в выходном каталоге нет ни одного из файлов, которые были указаны в составе пакета. Получается, что почему-то не так уж и необходимо колдовать с файлами проектов, чтоб на выхода лишнего мусора не было. Но это не факт (
Перекидываю файл .dll из результата компиляции на сетевой ресурс, и повторно запускаю машину с nanoCAD23.1. Загружаю сборку - voila! Все работает!!
Иван, земной поклон!!!
На всякий случай, если вдруг в выходном каталоге вдруг оказывается не только нужная dll, но и еще что-то от nanoCAD/MultiCAD - реально надо будет слегка донастроить csproj-файл, прописва в нем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <Platform>x64</Platform> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup> <ItemGroup> <PackageReference Include="nanoCadCore23.1.NET" Version="1.0.0" > <IncludeAssets>compile</IncludeAssets> <ExcludeAssert></ExcludeAssert> </PackageReference> </ItemGroup> </Project> |
Добавленные строки:
1 2 | <Platform>x64</Platform> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> |
и
1 2 | <IncludeAssets>compile</IncludeAssets> <ExcludeAssert></ExcludeAssert> |
P.S. Архив nuget, как они у меня получились (версии 23, 23.1, 24) доступны единым архивом по ссылке.