5

J'ai une solution qui contient plusieurs projets, appelons-les ProjectA et ProjectB. J'ai besoin de ProjectA pour avoir une référence à ProjectB, cependant quand je "Export Template" je ne peux pas sembler garder la référence. Ce que j'essaye de faire est de le faire créer la référence pour moi quand je crée un nouveau projet et puis le nomme automatiquement à ce que j'ai entré.Comment ajouter des références de projet de même solution lors de l'exportation de modèles dans Visual Studio?

Répondre

1

Ceci est légèrement hors de portée pour les modèles Visual Studio purs.

modèles Visual Studio prend en charge les paramètres de remplacements pour les modèles, donc ce que vous pouvez faire est:

  • dans votre fichier modèle ProjectA.zip vous trouverez ProjectA.csproj, qui est le modèle pour le projet
  • En ProjectA.csproj vous voulez trouver un <ItemGroup><Reference> entrées
  • dire contenant
  • Parmi eux devrait être une entrée comme <Reference Include="ProjectB">

Lorsque vous créez un projet à partir de votre modèle ProjectB, son nom sera spécifié par l'utilisateur, vous devez donc remplacer ProjectB par un paramètre de remplacement tel que $Foo$.

C'est là où il sort de la portée pour les modèles purs: Comment dire à Visual Studio pour remplacer $Foo$? Et quel serait le remplacement?

Votre seul choix ici est d'utiliser un assistant personnalisé, qui recherche le projet de type ProjectB ou demande à l'utilisateur de le faire.

Voici un aperçu de la façon d'obtenir l'assistant de modèle et personnalisé pour obtenir le long:

  • Créer un projet package VSIX.
  • Veillez à ajouter l'attribut [ProvideBindingPath] à votre colis. Cela est nécessaire pour obtenir l'assistant personnalisé enregistré (sinon vous devrez l'installer dans le GAC, si VS peut le trouver)
  • Créer votre assistant, il doit mettre en œuvre Microsoft.VisualStudio.TemplateWizard.IWizard
  • Ajoutez votre modèle à la solution et l'ajouter comme vsixmanifest de l'actif ProjectTemplate dans votre package

dans le fichier .vstemplate de votre modèle, ajoutez l'extrait suivant en dessous du bloc <TemplateContent>:

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

qui vous apportera votre Wizar d quand le projet est créé. Vous pouvez, dans la méthode RunStarted faire apparaître une boîte de dialogue qui demande la référence ou vous pouvez utiliser le paramètre automationObject (qui est en fait une instance EnvDTE.DTE) pour essayer de trouver le projet ProjectB et fournir son nom dans le replacementsDictionary.

Questions connexes