Про создание 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-пакета. И даю команду

... и на выходе получаю какой-то файл типа 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) доступны единым архивом по ссылке.

Размещено в .NET, nanoCAD, Среда разработки · Метки:



Поделитесь своим мнением


Я не робот.