J'ai quelques fichiers dll dans le dossier \ lib de mon dossier de projet. Dans la page de propriétés de dll, j'ai sélectionné "Build Action" comme "Content" et "Copy to Output Directory" comme "Copy always".
Après la construction, je reçois en fait la dll copiée mais elles sont à l'intérieur de \ bin \ Release \ lib et non dans \ bin \ Release.
Existe-t-il un moyen de copier des fichiers dll dans \ bin \ Release (et non dans \ bin \ Release \ lib) sans écrire un script post-build ou recourir à nant, etc.?
la source
ContentWithTargetPath
la compilation incrémentielle des pauses (testé sur VS 2017 15.9.9)Gardez-les
$(ProjectDir)\Lib
, mais ajoutez ces fichiers " En tant que lien " à la racine de votre .csproj. Maintenant, ils seront copiés dans bin \ Debug (ou dans tout autre dossier de sortie) sans être dans lib.EDIT: Cette réponse a été écrite il y a longtemps lorsque ContentWithTargetPath n'était pas disponible dans les versions de VS / MSBuild que j'utilisais. Laisser cette réponse ici pour les personnes qui pourraient avoir à utiliser une ancienne version de VS. Veuillez arrêter de commenter cela, nous savons tous qu'il existe de meilleures façons maintenant.
la source
Si votre intention principale est d'inclure des DLL sans encombrer le répertoire racine du projet, une autre solution consiste à déplacer les DLL vers un projet partagé distinct et à l'ajouter comme référence dans le projet d'origine.
(Notez que cet article ne répond pas directement à cette question car il ne préserve pas la structure du dossier et du projet, mais j'ai trouvé cette approche utile car j'ai pu restructurer mon projet dans mon cas et parce que je voulais éviter certains des inconvénients des autres approches ici.)
Pas
Solution -> Add -> New Project -> Shared Project
Build Action: Content
etCopy to Output Directory: Copy Always
)References -> Add Reference -> Shared Projects
La configuration ressemble à ceci:
la source
Ajoutez les fichiers dll en tant que référence au projet et sur le jeu de référence «Copier local» sur true.
la source
Si vous devez copier des fichiers du répertoire Libs vers le dossier racine VS2017:
Vers tout autre dossier, y compris le dossier Libs (RecursiveDir)
la source
Il semble dans VisualStudio 2015 que si les dll que vous ajoutez avec un lien se trouvent dans un sous-dossier de ce même projet - elles seront automatiquement placées dans un dossier et la sortie est également placée dans un dossier comme vous l'avez vu.
Si les dll sont dans un autre projet ou répertoire sur le disque pas dans un sous-dossier du projet , vous pouvez «Ajouter avec un lien», et ils seront placés dans le répertoire racine très bien.
la source
Une autre méthode consiste simplement à laisser les éléments en tant que type
None
. Dans l'explorateur de solutions, cliquez sur ceux que vous souhaitez déployer et définissez laContent
propriété surTrue
.Remarque: j'ai fait cela dans VS2019, et les choses peuvent changer d'une version à l'autre.
Pour que cela fonctionne, faites maintenant un clic droit sur votre projet et sélectionnez «Décharger le projet». Cliquez ensuite avec le bouton droit sur le projet déchargé et sélectionnez "Editer nom_projet.vcxproj".
Dans l'éditeur, allez jusqu'au bas du fichier et insérez cette cible juste avant la
</Project>
balise de fin :Maintenant, faites un clic droit sur le projet déchargé et sélectionnez "Recharger le projet". Sélectionnez pour enregistrer et fermer si vous y êtes invité.
J'ai également défini le
OutputDirectory
sur:$(SolutionDir)bin\$(Configuration)\$(Platform)\
et le
IntermediateDirectory
à:$(SolutionDir)obj\$(Configuration)\$(ProjectName)\$(Platform)\
dans la page Général des propriétés du projet. Cela place la sortie dans un dossier «bin» et les intermédiaires dans un dossier «obj» à la racine de votre solution.
Remarque: Le
$(SolutionDir)
n'est pas défini lorsque vous exécutez MSBuild à partir de la ligne de commande. Il existe une astuce que vous pouvez utiliser pour définir cela dans le dossier où se trouve le fichier .sln à l'aide de GetDirectoryNameOfFileAbove. (à gauche comme exercice pour le lecteur). En outre, il semble qu'en 2019, ils gèrent cela correctement sur la ligne de commande de toute façon. Ouais :) Le$(SolutionDir)
contient une barre oblique inverse de fin, donc aucune après. Les résultats de chacun doivent avoir une barre oblique inverse de fin.Maintenant, si vous possédez Pro ou supérieur, veuillez ne pas le faire chaque fois que vous devez créer un projet. Ce serait nul. Au lieu de cela, une fois que vous avez configuré votre projet comme vous l'aimez, sélectionnez
Project -> Export Template
. Vous lui donnez un nom, et la prochaine fois que vous voudrez créer un projet comme celui-là, choisissez simplement ce nom dans la boîte de dialogue Nouveau projet. (Dans l'ancienne version, je pense que c'était le casFiles -> Export Teamplate...
.)la source
J'ai eu le même problème avec Visual Studio 2010 / C # Project.
Pour les assemblys (c'est-à-dire ayant l'interface .NET), utilisez le dossier "Références" sous votre projet dans l'Explorateur de solutions. Faites un clic droit dessus, choisissez "Ajouter un élément existant" et recherchez votre assembly .dll.
Les fichiers .dll courants peuvent être placés dans un sous-dossier (comme "\ lib" a été mentionné ci-dessus) et dans les propriétés, sélectionnez:
Cela a fonctionné pour moi exactement comme souhaité - lors de la construction, les .DLL sont copiés dans le répertoire de sortie sans le sous-dossier "\ lib".
la source