Могу ли я создать пакет NuGet (или другой пакет) с устаревшими dll-файлами, которых нет в.NET Framework?

У нас есть несколько устаревших DLL-библиотек (в основном это может быть что угодно, некоторые из них - старые Fortran, некоторые -.NET), и мы хотим перенести их в артефакты Azure. Могу ли я создавать пакеты NuGet из этих устаревших dll, которые не основаны на.NET (например, на Фортране) сами по себе.

Я уже пытался создать пакеты NuGet, но я получаю предупреждения о своих зависимостях, потому что похоже, что они пытаются загрузить пакеты в.NET Framework. Является ли единственным реальным обходным путем здесь для создания библиотеки классов.NET или чего-то подобного, затем с помощью ссылки на dll через нее создать пакет NuGet с этой библиотекой и просто добавить устаревшие библиотеки dll в качестве ссылок?

2 ответа

Могу ли я создать пакет NuGet (или другой пакет) с устаревшими dll-файлами, которых нет в.NET Framework?

Ответ - да.

Вы можете нацелить эти устаревшие библиотеки на папку инструментов вместо папки lib. лайк:

<files>
    <file src="legacy\*.dll" target="Tools" />
    <!-- Other files -->
</files>

Затем упакуйте это .nuspec файл при создании конвейера, эти устаревшие библиотеки находятся в tools папка, которая не будет добавлена ​​в качестве ссылки.

Проверьте некоторые подробности из рабочего каталога на основе соглашения.

Надеюсь это поможет.

Я предполагаю, что вы имеете в виду, что ваш управляемый код используется DllImport атрибуты для вызова собственного кода, который в экосистеме.NET называется Platform Invoke или P/Invoke. Я упоминаю об этом, потому что если бы вы гуглили термины вокруг P / Invoke и nuget, вам, вероятно, повезло бы найти вопросы о переполнении стека существующего, сообщения в блоге и так далее. По этой причине полезно попытаться найти официальные или часто используемые названия функций, которые вы используете, чтобы вы знали, что искать. К сожалению, я не думаю, что команда NuGet имеет какие-либо документы по этому сценарию на данный момент.

Проекты в стиле SDK поддерживают runtime\ каталог в пакете, хотя я думаю, что это также несколько недокументировано. Я не знаю о традиционных проектах, использующих PackageReference (Пиар), но packages.config (ПК) определенно не поддерживает runtimes\, Для проектов на ПК автор пакета обычно (всегда?) Включает цели сборки для копирования собственных сборок после сборки. В пакете родные dll находятся в другом месте, часто автор помещает их в build каталог рядом с целями, но я думаю, что я также видел копию целей из runtime каталог, так что пакет поддерживает проекты в стиле ПК и SDK.

Я предлагаю вам подумать о некоторых обычно используемых нативных библиотеках с привязками.NET и посмотреть, как работает пакет (nupkg это просто zip переименованы). Мои предположения были бы sqlite или curl, или как веб-сервер ядра kestrel asp.net связывает libuv (или делал в более ранних версиях, если это больше не делает). Сейчас я нахожусь в отпуске, так что у меня нет мотивации копать самому.

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