Я знаю, что уже есть несколько вопросов по этой теме c, но все они кажутся устаревшими. Чтобы уточнить, я использую «новый» формат манифеста VSIX и пытаюсь следовать официальным инструкциям здесь: https://docs.microsoft.com/en-us/nuget/visual-studio-extensibility/visual-studio-templates
У меня есть один шаблон проекта и несколько шаблонов элементов, которые go с этим. Все они зависят от развертывания пакета NuGet, который должен поставляться локально в комплекте с VSIX. Я проверил полученный файл VSIX, и все файлы, кажется, находятся в правильном месте:
- Шаблон проекта имеет обязательный XML для объявления, какие пакеты устанавливать:
<WizardExtension>
<Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
<FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
</WizardExtension>
<WizardData>
<packages repository="extension" repositoryId="VsixID.etc.etc">
<package id="Rx-Linq" version="2.2.5" />
</packages>
</WizardData>
repositoryID
соответствует атрибуту ID
в файле .vsixmanifest
.
Для каждого пакета есть отдельная запись Asset
с формой :
<Asset Type="Rx-Linq.2.2.5.nupkg" d:Source="File" Path="Packages\Rx-Linq.2.2.5.nupkg" d:VsixSubPath="Packages" />
Я удалил все packages.config
и все ссылки на пакеты из файла .csproj
, установленного VSIX (и даже из самого проекта VSIX просто для хорошей меры).
Я проверил вывод VSIX, и в VSIX действительно есть папка Packages
, содержащая все файлы .nupkg
. Эта папка действительно распаковывается и копируется в папку Visual Studio Extensions
.
Несмотря на все это, когда я создаю новый проект с шаблоном, VS отображает сообщение об ошибке: Failed восстановить пакет из C:\users\<pathtoextensions>\Packages
.
Дело в том, что файлы .nupkg
фактически присутствуют в той папке, к которой относится сообщение об ошибке.
Я искал это несколько дней и я не могу найти ссылки на лучшие практики, которые действительно работают. Кажется, что эти манифесты VSIX ориентированы на устаревший packages.config
способ ведения дел, и есть дискуссии о том, как расширить их для использования PackageReference
.
Может кто-нибудь вообще дать какой-либо совет о том, как мы должны продолжать идти вперед? Пакеты не должны быть развернуты с VSIX больше? Должны ли мы просто заполнить проект PackageReference
записями и просто позволить пользователю разрешить их вручную?
Мне кажется, что я упускаю что-то фундаментальное, и любое понимание было бы чрезвычайно полезным.
Обновление: Я также открыл проблему в репозитории NuGet github, поскольку это явно проблема с функцией PackageRestore при восстановлении пакетов, хранящихся в установщике VSIX. Все остальное, упомянутое в этом вопросе, работает как задумано и ожидаемо, за исключением восстановления пакета.