如何添加nuget包并运行自定义项目向导?

时间:2013-07-07 02:25:10

标签: visual-studio visual-studio-2012 setup-project wizard

我构建了自己的项目模板。使用模板创建项目时,将启动自定义向导,允许用户编辑已创建的项目。

问题是我还需要在创建的项目中添加一些非常简单的nuget包(只需要mvvmlight,MyToolkit和其他1个)。为此,我使用正确的软件包向我的vstemplate添加了WizardData元素。

问题出现了:为了启动我的自定义向导,我需要在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>

有没有人有解决方案?

2 个答案:

答案 0 :(得分:10)

好吧,我遇到了同样的问题,很遗憾找不到这篇文章的答案。现在我得到了答案,我正在发布它。

不能有两个向导扩展。因此,您需要从自定义向导中实例化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);

以类似的方式委托所有方法中的向导实例。

答案 1 :(得分:1)

您可以添加多个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上(虽然快速查看这个link的答案似乎表明VS2012也支持它)