Поддержка Nuget в проектах, создаваемых с использованием различных платформ.NET (например,.NET 2, .NET 4 и т. Д.)

Эта проблема:

Я постараюсь сделать это простым.

  1. У нас есть два идентичных решения, но одно построено на.NET 2.0, а другое - на.NET 4.0
  2. Оба решения содержат по одному проекту, каждый из которых идентичен, но один из них построен на.NET 2.0 и.NET 4.0.
  3. Оба проекта ссылаются на одни и те же файлы
  4. Цель этого подхода заключается в том, что нам нужно создать вспомогательную библиотеку, но необходимо поддерживать несколько платформ (.NET 2.0..NET 4.0 и т. Д.)
  5. Решения, проекты и исходные файлы находятся в одной папке.

Наша цель:

Мы хотим использовать Nuget для NLog. Однако мы хотим, чтобы проект.NET 2.0 связывался только с библиотекой Nuget NLog 2.0, а проект.NET 4.0 связывался только с библиотекой Nuget NLog 4.0.

Есть ли в Nuget, чтобы поддержать это? т.е. конфигурация и т. д.

Благодарю.

2 ответа

Решение

Пакет NLog содержит сборки для платформ.NET 2.0 и.NET 4.0. Вы должны поместить сборки в один и тот же пакет и указать NLog как зависимость. Когда вы добавляете свой пакет в проект, NuGet получит правильные сборки как для NLog, так и для вашего пакета.

Как сказал Уфук, пакет NLog уже содержит сборки для.NET 2.0 и 4.0.

Если у вас было только одно решение:

  • Установите NLog. Правильный каркас будет ссылаться автоматически.
  • Запустите команду NuGet Spec.
  • Отредактируйте созданный nuspec (возможно, с помощью NuGet Package Explorer).
  • Запустите NuGet Pack. Зависимости от установленных пакетов будут добавлены автоматически, включая NLog.

Однако у вас есть два решения, и вы хотите создать один пакет. В этом случае:

  • Создайте папку со следующей структурой (сборки NLog не должны быть включены):

    PACKAGE_NAME
    |  lib
    |  |  net40
    |  |  |  (insert here your .NET 4.0 assemblies)
    |  |  net45
    |  |  |  (insert here your .NET 4.5 assemblies)
    
  • Перейти в корень этой папки.

  • Запустите команду NuGet Spec.
  • Переименуйте Package.nuspec в PACKAGE_NAME.nuspec.
  • Отредактируйте файл PACKAGE_NAME.nuspec (возможно, с помощью NuGet Package Explorer) с данными своего пакета и включите в метаданные следующие строки:

    <dependencies>
        <dependency id="NLog" version="REPLACE_WITH_VERSION" />
    </dependencies>
    
  • Запустите команду NuGet Pack. Ваш пакет будет создан (вы можете проверить, все ли в порядке с NuGet Package Explorer).

Теперь каждый, кто установит ваш пакет, будет правильно ссылаться на ваши сборки.

Если вам нужно больше деталей, проверьте эту ссылку.

Другие вопросы по тегам