c # — пакет NuGet с управляемой оболочкой dll, которая ссылается на битовые нативные библиотеки dll

Нужна помощь в создании пакета NuGet.
У нас есть сторонний управляемый dll на C # (назовите его «Managed.dll»), который каким-то образом использует / reference / wraps сторонних библиотек x86 и x64 для собственных программ (назовем их обоих «Unmanaged.dll») в зависимости от машины времени выполнения.

Managed.dll знает, как найти соответствующий Unmanaged.dll, если папки x86 и x64 находятся в одном каталоге, например:

  • бункер
    • отлаживать
      • Managed.dll
      • x86
        • Unmanaged.dll
      • x64
        • Unmanaged.dll

Я могу сделать пакет, как:

  • Lib
    • Managed.dll
    • x86
      • Unmanaged.dll
    • x64
      • Unmanaged.dll

Открыв пакет, я вижу, что файлы находятся в нужных местах, поэтому они включены.

Я также могу вручную «установить» его, поместив пакет в каталог пакетов, добавив ссылку на Managed.dll в csproj, а затем событие перед сборкой копирует битовые каталоги и dll в соответствующие места при сборке проекта и все это работает и т. д. Но теперь мы пытаемся сделать dll более легко распространяемым с помощью NuGet. Кроме того, если я добавляю строку для пакета в файл packages.config и удаляю папку пакетов, пакет повторно извлекается, и он все еще работает.

Однако, если я пытаюсь установить с помощью диспетчера пакетов NuGet, он пытается найти Unmanaged.dll. Результат установки PM:

Попытка собрать информацию о зависимостях для пакета «MyPackage.3.0.0» относительно проекта «MyProject» с таргетингом на .NETFramework, Version = v4.5.2 ‘
Сбор информации о зависимости занял 3,51 мс
Попытка разрешить зависимости для пакета «MyPackage.3.0.0» с DependencyBehavior «Lowest»
Разрешение информации о зависимости заняло 0 мс
Разрешение действий для установки пакета «MyPackage.3.0.0»
Решенные действия для установки пакета «MyPackage.3.0.0»
Получение пакета «MyPackage3.0.0» из «MySource».
Добавление пакета «MyPackage.3.0.0» в папку «C: \ MyProject \ packages»
Добавлен пакет «MyPackage.3.0.0» в папку «C: \ MyProject \ packages»
Установка не удалась. Откат…
Пакет «MyPackage.3.0.0» не существует в проекте «MyProject»
Удаление пакета «MyPackage.3.0.0» из папки «C: \ MyProject \ packages»
Удален пакет «MyPackage.3.0.0» из папки «C: \ MyProject \ packages»
Выполнение действия nuget заняло 895,64 мс
Пакет установки: не удалось добавить ссылку на «Неуправляемый».
Убедитесь, что файл доступен, и что он является допустимой сборкой или компонентом COM.
В строке: 1 символ: 1
+ Install-Package MyPackage -source MySource
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [Install-Package], исключение
+ FullyQualifiedErrorId: NuGetCmdletUnhandledException, NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

Я попытался добавить каталог сборки в пакет с файлом «Unmanaged.props», но возникает та же ошибка. Я попытался поместить ‘Unmanaged.dll’ на тот же уровень, что и ‘Managed.dll’ в пакете.

Итак, пожалуйста, скажите мне, почему он не может найти ‘Unmanaged.dll’ (для моего собственного назидания) и что мне нужно сделать, чтобы он работал правильно (может понадобиться какое-то удержание руки, чтобы пройти через него). Нужны ли мне цели? Кастомный install.ps1?

Я использую VS2015 и NuGet 3.5

Является это все еще так? Если да, может кто-нибудь объяснить, как заставить 2 пакета играть вместе?

Эта ссылка кажется, говорит, что управляемый и неуправляемый может быть в одном пакете.

Спасибо

2

Решение

У меня только что была эта проблема. Я должен был добавить раздел ссылок в файл .nuspec, в котором я ТОЛЬКО перечислил мои управляемые DLL. Это, кажется, помогает VS расслабиться и не пытаться добавить ссылку на неуправляемую DLL.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]