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

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

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

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

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

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

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

0 голосов
/ 27 мая 2019

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

Ответ - да.

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

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

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

Проверка Из условного рабочего каталога для некоторых деталей.

enter image description here

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

...