web-dev-qa-db-fra.com

"Ajouter en tant que lien" pour les dossiers dans les projets Visual Studio

Dans Visual Studio, nous pouvons "Ajouter en tant que lien" pour ajouter un lien vers un fichier dans un autre projet de la solution.

Existe-t-il un moyen de le faire pour des dossiers entiers, de sorte qu'un dossier entier du projet A soit visible dans le projet B, sans qu'il soit nécessaire de créer un lien manuellement vers les nouveaux éléments de ce dossier?

119
kpozin

Comme ceci blogpost a déclaré, c'est possible.

<ItemGroup>
    <Compile Include="any_abs_or_rel_path\**\*.*">
        <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
</ItemGroup>

Attention, les fichiers ne seront pas copiés.

129
mo.

Dans VS2012 et les versions ultérieures, vous pouvez faire glisser un dossier vers un autre projet en appuyant sur la touche alt . C'est la même chose que d'ajouter chaque fichier sous forme de lien manuellement mais plus rapidement.

upd : envisagez d'utiliser projets partagés si vous utilisez la mise à jour 2 du VS2013 (avec gestionnaire de référence de projet partagé =) ou VS2015.

125
mt_serg

Un ajout à la réponse de mo. et au commentaire de Marcus, si vous liez des éléments de contenu, vous devrez inclure l'extension de fichier:

<ItemGroup>
  <Compile Include="any_abs_or_rel_path\**\*.*">
    <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Compile>
</ItemGroup>
36
Chad

En ce qui concerne la partie de la requête originale pour qu'un dossier lié apparaisse dans l'EDI, il est en quelque sorte possible d'y parvenir. Il existe donc un dossier dans l'explorateur de solutions avec tous les fichiers liés à l'intérieur, au lieu de tous les fichiers figurant à la racine de la solution. Pour y parvenir, il faut ajouter:

  <ItemGroup>
    <Compile Include="..\anypath\**\*.*">
      <Link>MyData\A\%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
  </ItemGroup>

Cela inclura tous les fichiers du répertoire lié dans un nouveau dossier de l'explorateur de solution appelé MyData. Le "A" dans le code ci-dessus peut être appelé n'importe quoi, mais doit être présent pour que le dossier apparaisse.

22
Adam

Si vous voulez ajouter un dossier comme référence et que vous ne voulez pas le compiler, utilisez:

<Content Include="any_path\**\*.*">
  <Link>folder_in_B_project\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>
7
Neshta

Il n'y a aucun moyen de le faire pour des dossiers entiers, mais si deux projets font partie de la même solution, vous pouvez utiliser VSCommands 2010 pour copier plusieurs fichiers en tant que liens en même temps. voir cette vidéo pour plus d'informations http://www.youtube.com/watch?v=fa1M0NGXqMg ou aller à visualstudiogallery.msdn.Microsoft.com/en-us/d491911d-97f3-4cf6-87b0 -6a2882120acf? Lc = 1033

1
Registered User

Sortez le shell et ajoutez un lien symbolique.

runas administrateur alors

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

Lien symbolique BAM!

/ d spécifie le lien de répertoire.

Fonctionne dans Vista hors de la boîte. Peut être rétroporté à XP.

Documentation ici: http://technet.Microsoft.com/en-us/library/cc753194%28WS.10%29.aspx

Pour ceux qui ne connaissent pas les liens symboliques, il s’agit essentiellement d’un pointeur sur un autre fichier ou répertoire. C'est transparent pour les applications. Une copie sur disque, plusieurs façons de s’y attaquer. Vous pouvez également créer un "lien physique" qui ne soit pas un pointeur sur une autre adresse, mais une entrée d'identifiant de fichier dans NTFS pour le même fichier.

REMARQUE: comme indiqué dans les commentaires, cela ne fonctionnerait que sur l'ordinateur sur lequel vous avez créé le lien symbolique et ne fonctionnerait pas dans un système de contrôle de version comme git.

0
John Vance