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