6

私はいくつかのプロジェクトを含むソリューションを持っています。それらを ProjectA と ProjectB と呼びましょう。ProjectA に ProjectB への参照が必要ですが、「テンプレートをエクスポート」すると、参照を保持できないようです。私がやろうとしているのは、新しいプロジェクトを作成するときに参照を作成し、入力した名前に自動的に名前を付けることです。

4

1 に答える 1

1

これは、純粋な Visual Studio テンプレートの範囲外です。

Visual Studio テンプレートは、テンプレートの置換パラメーターをサポートしているため、次のことができます。

  • ProjectA.zipテンプレート ファイル内にProjectA.csprojは、プロジェクトのテンプレートである があります。
  • にはProjectA.csproj<ItemGroup>含む<Reference>エントリがあります
  • その中には次のようなエントリがあるはずです<Reference Include="ProjectB">

ProjectB テンプレートからプロジェクトを作成すると、その名前はユーザー指定になるため、ProjectBのような置換パラメーターに置き換えます$Foo$

これは、純粋なテンプレートの範囲外になる場所です: Visual Studio に置き換えるようにどのように指示します$Foo$か? で、代わりは何になるの?

ここでの唯一の選択肢は、カスタム ウィザードを使用することです。カスタム ウィザードは、ProjectB タイプのプロジェクトを探すか、ユーザーに要求します。

テンプレートとカスタム ウィザードをうまく連携させる方法の概要を次に示します。

  • VSIX パッケージ プロジェクトを作成します。
  • [ProvideBindingPath]必ずパッケージに属性を追加してください。これは、カスタム ウィザードを登録するために必要です (それ以外の場合は、VS が見つけられるように GAC にインストールする必要があります)。
  • ウィザードを作成し、実装する必要がありますMicrosoft.VisualStudio.TemplateWizard.IWizard
  • テンプレートをソリューションに追加し、パッケージの vsixmanifest に ProjectTemplate アセットとして追加します。

テンプレートの .vstemplate ファイルで、<TemplateContent>ブロックの下に次のスニペットを追加します。

<WizardExtension>
  <Assembly>Your.Packages.Assembly</Assembly>
  <FullClassName>Your.Wizard</FullClassName>
</WizardExtension>

プロジェクトが作成されると、ウィザードが表示されます。メソッドでRunStarted、参照を求めるダイアログを表示するか、automationObjectパラメーター (実際にはEnvDTE.DTEインスタンス) を使用して ProjectB プロジェクトを見つけて、その名前をreplacementsDictionary.

于 2014-03-01T16:37:23.227 に答える