2009-12-03 8 views
3

J'ai un problème avec la fonctionnalité "Copier vers la sortie" dans Visual Studio 2008. Peut-être que je ne comprends pas comment cela fonctionne.Référence du projet Visual Studio 2008

J'ai une solution avec quatre projets:

  • TestApp1 (application Windows)
  • TestAppA (application Windows)
  • TestProj1 (bibliothèque de classe)
  • TestProjA (bibliothèque de classe)

Les dépendances sont les suivantes (dépendance comme dans la référence du projet).

  • TestProj1 ne dépend de rien.
  • TestApp1 dépend TestProj1
  • TestProjA dépend TestProj1
  • TestAppA dépend TestProjA (et donc indirectement sur TestProj1)

En d'autres termes, l'arbre de dépendance ressemble à ceci.

TestApp1 
    TestProj1 
TestProjA 
    TestProj1 
TestAppA 
    TestProjA 
     TestProj1 

(chaque projet a une référence aux ensembles standard (système, System.Core, etc.), ainsi)

En TestProj1, j'ai ajouté un fichier texte, Test.txt. Dans les propriétés de ce fichier, j'ai spécifié "Action de construction: contenu" et "Copier dans le répertoire de sortie: Copier toujours".

Lorsque je construis la solution, Test.txt est recopié à

  • TestApp1 \ bin \ Debug
  • TestProj1 \ bin \ Debug
  • TestProjA \ bin \ Debug

Le le fichier est et non copié dans TestAppA \ bin \ debug et c'est ce que je trouve bizarre. Puisque TestProj1 s'appuie sur Test.txt pour fonctionner, et que TestAppA repose sur TestProj1, via TestProjA, TestApp1 ne fonctionnera pas.

Si j'ajoute une référence de projet de TestAppA directement à TestProj1 (donc j'ai une référence à TestProj1 et une autre à TestProjA), le fichier sera copié dans le dossier TestAppA \ bin \ debug.

Bien sûr, je pourrais configurer un événement de construction personnalisé pour copier le fichier Test.txt vers TestAppA \ bin \ debug, mais j'ai de mauvaises expériences avec les événements de construction personnalisés et je préférerais me fier aux mécanismes de copie intégrés . Donc, ma question est: Pourquoi Test.txt n'est pas copié dans TestAppA \ Bin \ debug?

Répondre

4

Todd a répondu déjà bien, mais deux solutions plus communes à ce sont:

  • ajouter une étape de post-construction à vos projets dépendants qui XCOPY le Test.txt dans leur dossier de sortie
  • ajouter le texte fichier en tant que ressource incorporée dans votre assemblée de projet TestProj1 et se débarrasser de la nécessité d'un fichier de données externe entièrement

Je vous suggère également que toutes vos dépendances pourraient simplement appeler une API dans TestProj1 pour récupérer les informations dont ils ont besoin , autoriser Cet assemblage permet d'encapsuler les données et de les stocker n'importe où, quel que soit leur format.

+1

+1 pour la suggestion d'encapsulation. – Todd

2

Visual Studio ne regarde que les références directes pour les fichiers de contenu, donc TestAppA ne sait pas que Test.txt existe puisqu'il ne le voit pas dans le fichier de projet TestProjA.

Ceci est une limitation de Visual Studio, et c'est pourquoi de nombreuses personnes finissent par pointer la sortie de tous leurs projets vers le même dossier.

L'autre option que vous avez est de créer un dossier "SharedContent". Vous pouvez ensuite placer le fichier texte dans ce dossier et l'ajouter à chaque projet qui en dépend en sélectionnant "Ajouter> Élément existant ..." sur chaque projet. Dans la boîte de dialogue Ajouter un élément, sélectionnez le fichier texte du dossier partagé et cliquez sur la petite flèche vers le bas sur le bouton "Ajouter". Si vous sélectionnez "Ajouter en tant que lien", vous pouvez ajouter le fichier à votre projet sans créer de copie.

Questions connexes