Могу ли я создать пакет 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 (или делал в более ранних версиях, если это больше не делает). Сейчас я нахожусь в отпуске, так что у меня нет мотивации копать самому.