Arhn - архитектура программирования

Включить неуправляемую DLL из пакета Nuget в пакет веб-развертывания

У меня есть пакет Nuget, который содержит неуправляемую DLL и предназначен для копирования этой DLL в выходную папку:

<?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Target Name="AfterBuild" DependsOnTargets="CopyFilesToOutputDirectory">
          <ItemGroup>
              <MyPackageSourceFile Include="$(SolutionDir)\packages\somepackage\unmanaged\*.dll" />
          </ItemGroup>
          <Copy SourceFiles="@(MyPackageSourceFile)" DestinationFolder="$(OutputPath)" />
      </Target>
</Project>

Это отлично работает, когда я создаю проект (используя Visual Studio)

Однако, если я хочу создать пакет публикации (в файловую систему или веб-развертывание снова с помощью VS), эти DLL не включены.

Какие-либо предложения?


  • Вы ссылаетесь на эти библиотеки DLL в своем проекте? 21.11.2017
  • Нет, не включать 21.11.2017
  • Я думаю, вам нужно создать фиктивную функцию для ссылки. Я где-то видел в самом SO 21.11.2017

Ответы:


1

Включить неуправляемую DLL из пакета Nuget в пакет веб-развертывания

Вы можете добавить другую цель после цели AfterBuild в свой пакет NuGet, чтобы динамически включать эти неуправляемые файлы DLL в файл проекта, или просто добавить цель в файл проекта.

Для этого добавьте цель с целевым порядком AfterTargets="AfterBuild" в свой пакет NuGet:

  <Target Name="AddUnmanagedDll" AfterTargets="AfterBuild">  
    <ItemGroup>
      <Content Include="$(OutputPath)\*.dll" />
    </ItemGroup>
  </Target>

Но эта цель добавит все DLL-файлы, включая управляемые DLL-файлы. Чтобы решить эту проблему, нам нужно изменить предыдущую цель AfterBuild, чтобы добавить еще одну задачу копирования для копирования этих неуправляемых DLL-файлов в отдельную папку:

  <Target Name="AfterBuild" DependsOnTargets="CopyFilesToOutputDirectory">
    <ItemGroup>
      <MyPackageSourceFile Include="$(SolutionDir)packages\somepackage\unmanaged\*.dll" />
    </ItemGroup>
    <Copy SourceFiles="@(MyPackageSourceFile)" DestinationFolder="$(OutputPath)" />
    <Copy SourceFiles="@(MyPackageSourceFile)" DestinationFolder="$(ProjectDir)UnmanagedDll" />
  </Target>

После добавьте еще одну задачу копирования <Copy SourceFiles="@(MyPackageSourceFile)" DestinationFolder="$(ProjectDir)UnmanagedDll" />, чтобы скопировать неуправляемые dll-файлы в отдельную папку $(ProjectDir)UnmanagedDll.

Затем мы могли бы изменить ItemGroup <Content Include="$(OutputPath)\*.dll" /> в целевом объекте AddUnmanagedDll на <Content Include="UnmanagedDll\*.dll" />.

Таким образом, цели в пакете NuGet должны быть:

  <Target Name="AfterBuild" DependsOnTargets="CopyFilesToOutputDirectory">
    <ItemGroup>
      <MyPackageSourceFile Include="$(SolutionDir)packages\app.1.0.0\unmanaged\*.dll" />
    </ItemGroup>
    <Copy SourceFiles="@(MyPackageSourceFile)" DestinationFolder="$(OutputPath)" />
    <Copy SourceFiles="@(MyPackageSourceFile)" DestinationFolder="$(ProjectDir)UnmanagedDll" />
  </Target>

  <Target Name="AddUnmanagedDll" AfterTargets="AfterBuild">  
    <ItemGroup>
      <Content Include="UnmanagedDll\*.dll" />
    </ItemGroup>
  </Target>

После публикации проекта неуправляемые включаются в пакет веб-развертывания:

введите здесь описание изображения

21.11.2017
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..