Ma solution consiste en: p>
J'ai ajouté Quel est le moyen (simple? évident?) moyen de copier upd strong>
Vidéo enregistrée pour être sûr que je vais bien je le fais bien: http://youtu.be/qws2toic5yq < / p> client code> - projet de démarrage, couche d'interface utilisateur. Dépend de:
app code> p>
app code> - bibliothèque, couche d'application, assembleur. Dépend de:
lib1 code>, ... p>
lib1 code> - bibliothèque, couche logique commerciale. A besoin d'un fichier spécifique pour fonctionner correctement:
tiersparty.dll code> p>
tiersparty.dll code> au projet
lib1 code> (
ajouter code>>
élément existant ... code> >
Ajouter code>) et définir
Copier dans le répertoire de sortie code> Propriété du fichier DLL sur
Copier toujours code>. Maintenant, le fichier DLL est copié dans la sortie
lib1 code> et à la sortie
code>, mais pas sur la sortie code> code> où j'en ai besoin pour être. p>
tiersparty.dll code> à la sortie du client code> sur chaque solution de la solution? p>
tiersparty.dll code> n'est pas une référence. En fait, c'est une autre dépendance de référence. Ma question est appliquée à n'importe quel fichier qui doit être dans le dossier de l'exécution de l'application. P>
3 Réponses :
Vous pouvez utiliser (dans Visual Studio) Lib1 Propriétés Propriétés -> Construire des événements -> Ligne de commande d'événement post-construction.
dans la "ligne de commande d'événement post-construction" Type de boîte copie em > Commandes qui copieront les fichiers requis dans le dossier de sortie du client. Dans cette éditeur, vous pouvez utiliser diverses macros VS (cliquez sur "Modifier la version postale" -> macros)
Comme ceci: p> Peut-être, vous devrez "construire" -> "Solution de reconstruction" à la première fois. P> P>
La mauvaise chose est que lib1 code> devient dépendant du projet code> du client code>. Je pense que cela est faux de la même manière que la fabrication code> code> dépend de tous ces fichiers tiers. Si vous choisissez entre toutes les mauvaises solutions, je préférerais ajouter tous les fichiers au client code> code> (add => article existant ...)
Dans tous les cas, le client dépend de la lib1 (via l'application). Si vous n'avez pas besoin de dépendances à partir de projets et de créer des actions, copiez simplement manuellement toutes vos ressources tierces vers le dossier de sortie. Ou utilisez une étape de création de poche sur le client qui copiera toutes les choses au répertoire du client.
C'est facile et il est étrange que cela ne fonctionnait pas pour vous. Je viens de vérifier et cela fonctionne:
tiersparty.dll code> au projet lib code>. li>
- L'action de construction
code> doit être définie sur contenu code> (la valeur par défaut) !!! li>
- SET
Copier sur le répertoire de sortie code> à Copier si plus récent code> ou copie toujours code> li>
- référence
lib code> à partir de app code> li>
- référence
app code> à partir de client code> li>
ol> Cela fonctionne dans Visual Studio 2012, mais ne semble pas fonctionner dans Visual Studio 2010. P>
VS2010: P>
============================================================
GetCopyToOutputDirectoryItems
Get all project items that may need to be transferred to the output directory.
This includes baggage items from transitively referenced projects. It would appear
that this target computes full transitive closure of content items for all referenced
projects; however that is not the case. It only collects the content items from its
immediate children and not children of children. The reason this happens is that
the ProjectReferenceWithConfiguration list that is consumed by _SplitProjectReferencesByFileExistence
is only populated in the current project and is empty in the children. The empty list
causes _MSBuildProjectReferenceExistent to be empty and terminates the recursion.
============================================================
Êtes-vous sûr que après la construction de la solution tiersparty.dll code> est copié dans la sortie code> du client code>? Je le vois dans
App code> Sortie du projet uniquement.
Oui, je suis sûr. J'ai spécifiquement vérifié. (J'ai utilisé une image cependant, pas un fichier .dll.). Êtes-vous sûr que l'action Build code> pour
tierspary.dll code> est définie sur
contenu code>? Je peux zip et partager ma solution (vs 2012) lorsque je rentre à la maison.
Oui, Build Action code> est
contenu code>. Je suis en train d'utiliser vs2010 - cela pourrait être un bug? Regardez ma vidéo, tout est très simple: YouTu.be/qws2Oic5yq
Vous compliquez un peu les choses avec ce style de débogage. Supprimer le fichier juste aller sur le client bin / bin / débogage code> avec explorateur. Cliquez avec le bouton droit de la souris sur
Client CODE> et sélectionnez
Build code>, puis passez à l'explorateur et consultez les nouveaux fichiers.
J'ai confirmé que cela fonctionne dans VS2012, mais ne fonctionne pas dans VS2010. C'est un peu étrange et il est difficile de dire quelle version est buggy. Aucune version ne prend vraiment en charge les «articles de bagages provenant de projets référencés de manière transitoire», mais en quelque sorte vs2012 le fait. VS2012 saute quelques étapes de construction qui "étaient auparavant construits avec succès" ou parce que la propriété BuildingProject code> devient étrangement fausse. VS2010 exécute plus de cibles et perd d'une manière ou d'une autre manière des fichiers de contenu de petits-enfants dans le processus.
+1 Je ne pensais pas que cela a fonctionné parce que je n'avais utilisé que VS10. Cela fonctionne comme prévu dans VS12 / 13.
Ajouter un élément existant en tant que lien: strong> J'ai eu un problème similaire dans Dans votre cas, dans juste pour référence: em> J'utilisais réellement une source ouverte libgit2shaarp qui nécessitait une dll (libgit2.dll) à être disponible dans le répertoire de sortie. Par conséquent, dans la couche d'interface utilisateur, qui avait ajouté une couche d'application contenant L'autre option pourrait être d'écrire des scripts de publication pour savoir comment le vs2010 cod> et j'ai un peu fini en ajoutant le fichier sous
lien code> et mettre à jour sa propriété sur
Copier toujours code>. P>
Client CODE> Projet, Ajouter
tiersparty.dll code> comme
link code> (ajouter> élément existant> Ajouter comme Link) et définir
copier dans le répertoire de sortie code> Propriété du fichier DLL sur
Copier toujours code>.
note em>: il copierait la hiérarchie des dossiers du nœud de projet. p>
libgit2shaarp.dll code> comme référence; Je devais ajouter
libgit2.dll code> sous forme de lien code> code> +
copier toujours code>. Ceci a été recommandé une solution. P>
Client code>
copier code> sur
msbuild code> fonctionne, vous pouvez vous reporter à
Microsoft.common.targets code> (doit être disponible @ C: \ Windows \ Microsoft.net \ Framework \ V4.0.30319 \ Microsoft.common.Targets dans votre système) P>
<Target
Name="CopyFilesToOutputDirectory"
DependsOnTargets="
ComputeIntermediateSatelliteAssemblies;
_CopyFilesMarkedCopyLocal;
_CopySourceItemsToOutputDirectory;
_CopyAppConfigFile;
_CopyManifestFiles;
_CheckForCompileOutputs;
_SGenCheckForOutputs">
@astef Installing Visual Studio 2012 qui n'a pas ce bogue est un peu mieux =)
@JaCOB Si vous avez une bonne compréhension de la manière dont les objectifs standard Msbuild sont entrelacés dans une construction Visual Studio, vous pouvez peut-être examiner ce cas et essayer de déterminer pourquoi les comportements VS2012 et VS2010 divergent lorsqu'ils construisent le même projet. Voir ma réponse pour les parties pertinentes du journal: Stackoverflow.com/a/16848316/1497385
@ Ark-kun: Comme je le vois, VS2010 utilise Msbuild de .NET4.0 et VS2012 utilise 4.5. Je n'ai pas eu de chance d'avoir la chance de travailler sur VS2012, vérifiera sûrement cela ..
Il n'y a qu'un seul msbuild.exe avec .NET 4.0 et .NET 4.5 - C: \ Windows \ microsoft.net \ framework \ v4.0.30319 \ msbuild.exe code>. Il n'y a pas de C: \ Windows \ Microsoft.net \ Framework \ v4.5. * \. Également vs 2012 utilise
c: \ windows \ microsoft.net \ framework \ v4.0.30319 \ microsoft.commez sur.targets code> - le même que vs 2010.