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

16

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

问题在于,我还需要将一些非常简单的NuGet软件包添加到创建的项目中(仅限mvvmlight、MyToolkit和1个其他软件包)。为此,我向我的vstemplate添加了一个WizardData元素,并放置了正确的软件包。

这里出现了问题:为了启动我的自定义向导,我需要将对我的向导的引用放置在WizardExtension元素内。但是,为了自动安装NuGet软件包,我需要在WizardExtension元素内放置对NuGet.VisualStudio.TemplateWizard的引用,而WizardExtension只能有一个类进行实例化,但我有两个需要运行的类。

那么我该如何解决这个问题呢?

下面是启动自己向导的代码。现在我只需要安装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>

有人有解决方案吗?


你尝试过从命令行运行NuGet吗?(nuget.exe) - Sebazzz
从自定义项目向导程序中进行编程? - Leon Cullens
寻找相同的答案(但在解决方案vstemplate级别上)。正在研究是否可以拥有自己的向导,可能调用Nuget向导的函数。不确定如何实现。 - Boris Callens
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);

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


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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接