2013-02-21 4 views
1

Я написал расширение VS2012 для внутреннего использования, которое упрощает процесс публикации и обновления любых пакетов nuget из nuspec, которые содержатся в текущем загруженном решении.Управление зависимостью одного расширения VS от другого

Я ссылается Nuget.Core из официального источника пакета, чтобы сделать это, добавил зависимость уровня расширения на официальное продлении NuGet, а затем отмечен мою местную ссылка на сборку Nuget.Core не быть включен в VSIX.

Все было в порядке до вчерашнего дня, когда обновлялся nuget - теперь мое расширение вообще не работает, поскольку оно не может загрузить более старую версию этой основной сборки (номер версии всегда изменяется).

Я только что попробовал получить новую версию от nuget, но она еще не выпущена.

Так я столкнулся с несколькими вариантов: снова

  • Отпустить расширение, с привязкой переадресовать к новой версии
  • Ссылки DLL из установленного места расширения NuGet

Но ни один из них не кажется идеальным, поскольку я не хочу, чтобы продолжать восстановление и выпуск моего пакета всякий раз, когда обновляется nuget! В равной степени я не хочу разворачивать свою копию сборки с расширением, так как это может остановить работу основного расширения nuget.

У кого-нибудь есть другие варианты для меня?

ответ

0

I tweeted this question to Luan Nguyen - кто работает по всему продукту Nuget.

Как вы увидите из цепочки отклика, решение не для ссылки Nuget.Core напрямую, потому что оно не поддерживается. Есть поставщики услуг, предлагаемые Nuget для выполнения некоторых операций Nuget, но не то, что я искал.

Итак, я закончил следовать его предложению - захват источников Nuget из кода и создание локальной копии сборки (с другой идентичностью, чтобы она не мешала расширению самородок).

Я должен сохранить это обновление, если в Nuget будут добавлены новые функции пакета, но он продолжит работу, если расширение будет обновлено.

Другой вариант: ILMerge локальный Nuget.Core в расширение; однако это сборка WPF, и они не могут быть объединены. Я мог бы создать стандартную сборку спутников, в которую я мог бы объединить Nuget.Core, я полагаю.

0

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

Что касается самой расширяемости VS, насколько я знаю, существует способ связи между расширениями с помощью ServiceProvider. Вы можете либо поделиться своим сервисом, либо получить общие. Поэтому, если Nuget предоставляет любые услуги, вы можете попытаться использовать их через них.

В качестве контрольной точки проверьте документацию для ServiceProvider Class.

0

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

Afaik, это норма. Почему это сломает что-нибудь? Попробуй.

+0

Проблема возникает при обновлении другого расширения, таким образом, развертывание более новой версии DLL, от которой зависит мой код (в решающей степени, с другой версией сборки). Затем это прерывает расширение, потому что оно было построено против более низкой версии - выброса ошибки загрузки .Net. Я не могу ограничить мою команду не обновлять Nuget всякий раз, когда он появляется. - но в равной степени я не могу распространять основную DLL, потому что он будет разорвать расширение Nuget при их обновлении. –

+0

Не может ли компьютер одновременно хранить несколько версий любой библиотеки? Затем вы можете явно указать точную версию, которая вам нужна. –