Каталог вывода нативной dll в комплекте с NuGet - PullRequest
0 голосов
/ 21 сентября 2018

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

Моя текущая компоновка пакета NuGet выглядит следующим образом:

\build
  packageId.targets
  file1.dll
  file2.dll
\lib
  \netstandard1.4
    assembly.dll

Содержимое packageId.targets:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <NativeLibs Include="$(MSBuildThisFileDirectory)\*.dll"/>
    <None Include="@(NativeLibs)" Link="$(RecursiveDir)$(Filename)$(Extension)">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

Это, в соответствии с ответами на другие вопросы, может привести к тому, что мои DLL-библиотеки будут помещены в каталог bin\Debug проекта с помощью пакета.Однако это не так.Вместо этого они помещаются в bin\Debug\packages\packageId\build.

Теперь я много экспериментировал и заметил все более и более странное поведение, которое я не могу понять:

  • Если япереместите библиотеки DLL в корень пакета NuGet (как предлагает один ответ) и соответственно измените файл .targets, они вообще не копируются .Там также нет сообщения об ошибке.
  • Если я изменю файл .targets на только ссылка file1.dll в обоих Include= и Link=, оба файла будут скопированы в любом случае.
  • Так что мне было интересно, если какая-то политика просто игнорирует файл .targets и копирует все, что находится в build, в этот путь в выходной папке, но когда я удаляю файл .targets, файлы DLL не получаткопировать больше.

Теперь я еще меньше понимаю, что происходит.

Что мне нужно изменить, чтобы скопировать библиотеки DLL прямо в bin\Debug?

1 Ответ

0 голосов
/ 22 сентября 2018

Новый способ обработки специфичных для среды выполнения запросов в NuGet заключается в использовании папки runtimes для размещения собственных ресурсов:

\lib
  \netstandard2.0
    ManagedWrapper.dll
\runtimes
  \win-x86
    \native 
     NativeThing.dll
  \win-x64
    \native 
     NativeThing.dll
  \linux-x64
    \native 
     libNativeThing.so
  \osx-x64
    \native 
     libNativeThing.dylib

Если пакет используется из проекта .NET Framework, вы можетенеобходимо добавить ссылку на пакет Microsoft.NETCore.Platforms, который предоставляет график времени выполнения (runtimes.json) для NuGet, чтобы обеспечить правильные отображения RID, если вы не используете базовые RID (например, win10-x64 использует ресурсы win-x64).

...