16

我建立了自己的项目模板。当使用模板创建项目时,会启动一个自定义向导,允许用户编辑创建的项目。

问题是我还需要在创建的项目中添加一些非常简单的 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>

有没有人有办法解决吗?

4

2 回答 2

9

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

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

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

于 2013-10-30T06:57:37.320 回答
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 支持)

于 2017-07-13T18:35:34.610 回答