Nuget: установить один проект в решении как неуправляемый Nuget?

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

У нас есть собственный фреймворк, который мы используем почти во всех наших проектах. Итак, я недавно создал для него шаблон проекта Visual Studio вместе с VSIX... было несколько проблем на этом пути из-за Nuget... он не создавал новый проект из шаблона, когда шаблон ссылался на фреймворк. , потому что платформа использовала Nuget и не могла найти папки nuget в новом проекте, созданном из шаблона. Итак, решение состояло в том, чтобы удалить nuget из проекта фреймворка и использовать Nuget только для других проектов (что угодно, кроме фреймворка). Хорошо, отлично .. это решает проблему!

Однако теперь, когда я открываю каждый проект, управляемый Nuget, он автоматически добавляет эти две строки обратно в .csproj фреймворка:

<RestorePackages>true</RestorePackages>

и

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

Это расстраивает, потому что теперь нам нужно либо полностью прекратить использование Nuget, либо продолжать удалять эти строки из файла .csproj нашего фреймворка каждый раз, когда мы хотим перестроить шаблон.

Могу ли я каким-либо образом сказать Nuget игнорировать один проект в решении? В моем случае игнорировать фреймворк...


person Matt    schedule 15.04.2013    source источник
comment
У меня действительно нет опыта настройки шаблонов Visual Studio, поэтому я могу задавать здесь глупые вопросы: во-первых, выполнили ли вы все шаги, описанные в документации (docs.nuget.org/docs/reference/) для использования пакетов NuGet в шаблонах VS? А также, этот ваш внутренний фреймворк, как вы включаете его во все свои другие проекты? Это делается как пакет NuGet?   -  person Julian    schedule 18.04.2013
comment
Привет. Спасибо за ответ. Во-первых, я не включаю пакеты nuget в свой шаблон. Хотя есть package.xml, поэтому, когда мы создаем новый проект, мы просто настраиваем его для управления Nuget, а затем Nuget автоматически обнаружит эти отсутствующие пакеты из файла xml и автоматически загрузит их...   -  person Matt    schedule 18.04.2013
comment
... Во-вторых, мы не ссылаемся на фреймворк (библиотеку кода) с помощью Nuget.. на него ссылаются как на проект из решения (щелкните правой кнопкой мыши, добавьте существующий проект).. который, конечно, мы должны повторно сослаться после создания проекта. Мне нужно изучить шаблоны для нескольких проектов позже, чтобы решить эту проблему... в любом случае... вы можете подумать... тогда просто удалите ссылку из шаблона проекта. Ну, если я это сделаю, да... Я полагаю, что проект будет создан... но тогда шаблон проекта не будет собран (проблема с отсутствующими папками nuget, потому что фреймворк использует Nuget)...   -  person Matt    schedule 18.04.2013
comment
.. и снова .. если мы удалим Nuget из фреймворка (исходный план), это нормально, и он работает, но в следующий раз, когда мы откроем другой проект, управляемый nuget, который ссылается на фреймворк (то же решение), он автоматически добавит framework для управления nuget снова... и мы снова вернулись к началу. Кроме того, когда мы затем открываем решение для фреймворка, оно также жалуется на отсутствие папок nuget, потому что nuget был включен из внешнего решения, а не основного решения фреймворка.   -  person Matt    schedule 18.04.2013
comment
И если кому-то интересно, почему мы добавляем в решение библиотеку кода, а не ссылаемся на версионную DLL... это потому, что библиотека постоянно меняется и обновляется с каждым новым проектом... она модифицируется ежедневно... поэтому использование библиотек DLL на самом деле не вариант для нас   -  person Matt    schedule 18.04.2013
comment
@Nailuj, я только что просмотрел вашу ссылку, а также нашел это: samritchie.net/2012/09/17/nuget-packages-in-vs2012-templates... это действительно может помочь. Я попробую позже и посмотрю, что произойдет.   -  person Matt    schedule 18.04.2013


Ответы (1)


По предложению Наилуя, а также из того, что я нашел здесь: http://samritchie.net/2012/09/17/nuget-packages-in-vs2012-templates/, я попробовал что-то, что, как я думал, сработает, но оно не удовлетворило мои потребности; этот метод предназначен только для включения пакетов в новый проект, что для меня бесполезно и не решает проблему (ошибка об отсутствующих целевых папках .nuget). Итак, я немного поиграл с этим и придумал что-то не идеальное, но приемлемое:

  1. Удалите все, что связано с Nuget, из проекта, который должен служить шаблоном. Затем это вызывает проблему с упомянутой структурой, потому что ожидается, что проект структуры будет управляться Nuget, а из этого решения это не так, поэтому возникает ошибка... поэтому:
  2. Удалите проект фреймворка из решения и ссылайтесь только на DLL, чтобы он собирался, но не жаловался на отсутствующие папки nuget.
  3. Восстановить
  4. Экспорт в шаблон
  5. Сборка VSIX с использованием экспортированного шаблона
  6. Установить шаблон
  7. Создайте новый проект из только что установленного шаблона
  8. Включить восстановление пакета Nuget при решении нового проекта
  9. Откройте консоль диспетчера пакетов
  10. Уведомление об отсутствии пакетов и согласие на их загрузку и установку (около 1 минуты)
  11. Удалите ссылку на библиотеку DLL фреймворка и замените ее фактическим проектом (щелкните правой кнопкой мыши, «Добавить существующий проект»)
  12. Восстановить и запустить
  13. Празднуйте!

Я надеюсь, что это поможет всем, кто может оказаться в этом затруднительном положении. Если у кого-то есть идея получше, пожалуйста, дайте мне знать. Щедрость все еще открыта еще 6 дней, поэтому я пока не буду отмечать это как ответ.

person Matt    schedule 18.04.2013