16

独自のプロジェクト テンプレートを作成しました。テンプレートを使用してプロジェクトが作成されると、作成されたプロジェクトをユーザーが編集できるようにするカスタム ウィザードが起動されます。

問題は、作成したプロジェクトにいくつかの非常に単純な nuget パッケージ (mvvmlight、MyToolkit、その他 1 つだけ) を追加する必要があることです。これを行うためにWizardData、適切なパッケージを含む要素を vstemplate に追加しました。

WizardExtensionここで問題が発生します。カスタム ウィザードを起動するには、要素内にウィザードへの参照を配置する必要があります。しかし、nuget パッケージを自動的にインストールするには、要素NuGet.VisualStudio.TemplateWizard内に参照を配置する必要があり、インスタンス化するクラスは1 つしか持てませんが、実行する必要があるのは 2 つです。WizardExtensionWizardExtension

では、どうすればこれを解決できますか?

これは、独自のウィザードを起動するコードです。ここで、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

さて、私は同じ問題に遭遇し、この投稿に対する回答が見つからないことに失望しました. 今、私は答えを得て、それを投稿しています。

ウィザードの拡張機能を 2 つにすることはできません。そのため、カスタム ウィザード (以下を参照) から 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 に答える