Ensemble “Copie Locale” à False par défaut?
Puis-je définir la valeur par défaut de l'option de "Copie Locale" dans Visual Studio pour de Faux? Dans la plupart des fois, quand j'ajoute une dll en tant que dépendance d'un projet, je veux la Copie Locale de propriété est définie sur False. Par défaut, il est Vrai. Est-il un moyen de changer le comportement par défaut de Visual Studio? (2008)
- Pour une solution facile de commencer avec msbuild v 15 voir ma réponse ci-dessous stackoverflow.com/a/50755479/1196586
Vous devez vous connecter pour publier un commentaire.
Pas - Visual Studio utilise un règlement interne pour déterminer l'ensemble de la Copie Locale d'.
De MSDN:
En fait, vous le pouvez. Vous avez besoin d'un couple de choses:
.targets
fichier de copylocal (<Private>
tag, pour être précis) false par défaut..csproj
fichiers. Vous pouvez l'ajouter dans la dernière ligne, avant la clôture de</Project>
tag, ça va ressembler à<Import Project="..\Build\yourtarget.targets" />
.Maintenant chaque projet avec cet objectif a copylocal désactivé par défaut.
L'inconvénient est que vous devez modifier chaque fichier csproj, y compris de nouveaux. Vous pouvez contourner le nouveau projet d'émission par la modification de la VS modèle de projet. Au lieu de
Class.cs
décrit dans l'article du blog, vous avez besoin de modifierClass.vstemplate
(dans le même fichier zip).Avec cette approche, il y a un problème - le chemin lui-même. Si vous utilisez codé en dur chemin d'accès relatif nouvellement généré csproj fichiers, ils peuvent être faux (sauf si vous avez à plat de la structure de projet).
Vous pouvez:
Il doit y avoir une meilleure solution, mais je n'ai pas encore trouvé.
.csproj
fichier importé dans chaque nouveau projet à l'aide d'un modèle. Le système de template n'est pas très propre et nous ne savons pas si nous l'aimons encore.Nous n'utilisons pas un .objectifs de fichiers (comme suggéré dans la réponse ya23), afin que nous venons de modifier la
.csproj
projet de fichier manuellement dans un éditeur de texte et ajoutez le<Private>
élément de la référence, comme ceci:La valeur de la
<Private>
élément correspond à la valeur de la "Copie locale" de la propriété. Par exemple, si<Private>
est définie sur False, "Copie locale" est aussi faux..Cogner ce parce qu'il semble qu'il y ait maintenant un package nuget permettant exactement ce...
https://nuget.org/packages/CopyLocalFalse
N'ai pas encore essayé, en espérant que ça aide.
De départ avec msbuild v 15, vous pouvez copier un fichier unique appelé Répertoire.Construire.accessoires dans le dossier racine qui contient votre source:
Plus rien à faire! Cela fonctionne bien avec Visual Studio 2017 et aussi la vNext Construire. Puissiez-vous avoir à fermer Visual Studio et que d'ouvrir votre solution de nouveau à prendre le fichier d'effet.
https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build#directorybuildprops-and-directorybuildtargets
Concernant la solution posté par @herzbube, si vous souhaitez désactiver la "Copie Locale" pour tous (ou la plupart) des références dans votre .csproj fichier, vous n'avez pas besoin de
<Private>False</Private>
individuellement sur chaqueReference
, vous pouvez simplement mettre directement dans la .csproj:Cela n'affecte pas les projets référencés avec
<ProjectReference>
, mais vous pouvez faire la même chose, à la place ou en plus-pour ceux:Si vous souhaitez à la fois de ces, vous pouvez les fusionner en un seul groupe:
Assurez-vous que vous mettez ces remplacements avant la première
<Reference ...>
ou<ProjectReference ...>
vous souhaitez affecter parce que ces blocs ne s'appliquera qu'aux références qui apparaissent au-dessous d'eux. Ensuite, si il ya un peu que vous ne voulez vraiment être localement copié, vous pouvez simplement remplacer ceux retour individuellement (c'est à dire, à l'intérieur de l'étiquette elle-même), cette fois en utilisantTrue
.Pour les cas les plus avancés, vous pouvez changer la valeur de remplacement des aller-retour entre Vrai et Faux plusieurs fois dans le même .fichier csproj. Une autre technique de pointe serait de placer stratégiquement certaines de vos références en dessous de ces blocs, et d'autres ci-dessus, de sorte que le dernier ne sera pas affectée.
Tout cela devrait faire le XML dans votre .csproj beaucoup plus propre et plus facile à lire. Mais il y a encore plus de bonnes nouvelles, alors lisez la suite...
Pour sélectionner les projets qui devraient être marqués
<Private>False</Private>
cela dépend généralement de la situation spécifique, mais il y a quelque chose de fondamental tout le monde peut et devrait ne pour les débutants. C'est une étape de base, simple et efficace, il offre un tel énorme MSBuild l'amélioration de la fiabilité1. et au moment de la construction de l'accélération, et avec peu d'inconvénients--chaque grande solution qui utilise la valeur par défaut (à l'échelle locale par projet) C# des emplacements de sortie doit presque toujours faire ce réglage:Cela fonctionne parfaitement puisque l' .csproj pour une bibliothèque de classe peut faire référence à plusieurs autres bibliothèques de classes, mais le .csproj pour un exécutable généralement jamais fait référence à un autre fichier exécutable. Ainsi, pour chaque construit localement de la bibliothèque, la seule .dll dans son
bin
dossier sera lui-même, alors que tous les construit localement candidature contiendra l'ensemble des construit localement les bibliothèques de références.Idéalement, rien ne change pour le référencés bibliothèques qui ne sont pas construits par votre solution, car il s'agit généralement de l'utilisation
<Reference>
au lieu de<ProjectReference>
, et nous n'avons pas modifier l'ancienne balise. Mais notez l'hypothèse vient d'être mentionné; si elle est malmenée par certains de vos projets, vous devrez peut-être faire quelques ajustements.[1.] L'amélioration de la fiabilité pourrait être lié à la collision de fichiers qui peuvent se produire lors de la collecte de la même bibliothèque à partir de plusieurs disjoints de chemins dans un graphe de dépendance, en particulier dans simultanées construit.