私はいくつかのプロジェクトを含むソリューションを持っています。それらを 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
.