Как добавить пакеты nuget и запустить мастер специальных проектов?
Я построил собственный шаблон проекта. Когда проект создается с помощью шаблона, запускается пользовательский мастер, который позволяет пользователю редактировать созданный проект.
Проблема в том, что мне также нужно добавить в созданный проект несколько простых пакетов nuget (только mvvmlight, MyToolkit и еще 1). Для этого я добавил элемент WizardData
на мой vstemplate с правильными пакетами.
Здесь возникает проблема: чтобы запустить мой мастер, мне нужно поместить ссылку на мой мастер внутри элемента WizardExtension
. Но для автоматической установки пакетов nuget мне нужно поместить ссылку на NuGet.VisualStudio.TemplateWizard
внутри моего элемента WizardExtension
, а WizardExtension
может иметь только один класс, который он будет создавать, но у меня есть 2, которые нужно запустить.
Итак, как я могу это решить?
Вот код, запускающий мой собственный мастер. Теперь мне также нужны пакеты NuGet для установки:
<WizardExtension>
<Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=7eb2f41084fd4cd5</Assembly>
<FullClassName>PartyTemplateWizard.Wizard</FullClassName>
</WizardExtension>
<WizardData>
<packages repository="template">
<package id="MvvmLight" version="4.1.27.0" />
<package id="MvvmLightLibs" version="4.1.27.0" />
<package id="MyToolkit" version="1.14.0" />
<package id="linqtotwitter" version="2.1.06" />
</packages>
</WizardData>
У кого-нибудь есть решение?
Ответы
Ответ 1
Ну, я столкнулся с той же проблемой и был разочарован тем, что не нашел ответа на этот пост. Теперь у меня есть ответ, и я отправляю его.
Не может быть двух расширений мастера. Поэтому вам нужно создать экземпляр NuGet из вашего настраиваемого мастера (см. Ниже) и делегировать все методы этому экземпляру.
Добавьте эти строки в метод RunStarted
:
Assembly asm = Assembly.Load("NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a");
wizard = (IWizard)asm.CreateInstance("NuGet.VisualStudio.TemplateWizard");
И вызовите метод в экземпляре следующим образом:
wizard.RunStarted(automationObject, replacementsDictionary, runKind, customParams);
Аналогичным образом делегируйте экземпляр мастера во всех методах.
Ответ 2
Вместо того, чтобы ставить несколько ссылок в один элемент WizardExtension
, вы можете добавить несколько элементов WizardExtension
(по одному для каждой ссылки на сборку).
Например:
<WizardExtension>
<Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
<FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
</WizardExtension>
<WizardExtension>
<Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=7eb2f41084fd4cd5</Assembly>
<FullClassName>PartyTemplateWizard.Wizard</FullClassName>
</WizardExtension>
<WizardData>
<packages repository="extension" repositoryId="your-extension-id-here">
<package id="MvvmLight" version="4.1.27.0" />
<package id="MvvmLightLibs" version="4.1.27.0" />
<package id="MyToolkit" version="1.14.0" />
<package id="linqtotwitter" version="2.1.06" />
</packages>
</WizardData>
Используемые ссылки:
Отказ от ответственности: Я тестировал это только на Visual Studio-2015; а не Visual-Studio-2012 (хотя быстрый просмотр ответов на эту ссылку кажется, указывает, что он поддерживается и на VS2012)