Visual Studio: Comment «copier vers le répertoire de sortie» sans copier la structure du dossier?

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 la copie de la DLL mais elle se trouve dans \ bin \ Release \ lib et non dans \ bin \ Release.

Existe-t-il un moyen de copier les fichiers dll dans \ bin \ Release (et non dans \ bin \ Release \ lib) sans écrire un script de post-construction ou avoir recours à nant, etc.?

au lieu de utilisez et spécifiez le chemin cible, comme ceci:

  PreserveNewest some_file.dat  

Notez que cette entrée peut ne pas être visible à partir de Visual Studio (2012, 2015, 2017), mais une fois ajoutée manuellement à csproj, elle apparaîtra dans Visual Studio. Le chemin cible ne sera cependant pas modifiable via l’interface utilisateur.

Gardez-les dans $(ProjectDir)\Lib , mais ajoutez ces fichiers ” comme un lien ” à la racine de votre .csproj. Maintenant, ils seront copiés dans bin \ Debug (ou tout autre dossier de sortie) sans être dans la lib.

EDIT: Cette réponse a été écrite à un moment où ContentWithTargetPath n’était pas disponible dans les versions de VS / MSBuild que j’utilisais. Laissant cette réponse ici pour les personnes qui pourraient avoir à utiliser une ancienne version de VS. S’il vous plaît, arrêtez de commenter, nous soaps tous qu’il y a de meilleurs moyens maintenant.

Ajoutez les fichiers dll en tant que référence au projet et sur l’ensemble de référence “Copie locale” en true.

Il semble que dans VisualStudio 2015, si les DLL que vous “ajoutez avec un lien” se trouvent dans un sous-dossier du même projet , elles seront automatiquement placées dans un dossier et la sortie sera également placée dans un dossier comme vous l’avez vu.

Si les DLL se trouvent dans un autre projet ou répertoire sur le disque qui ne se trouve pas dans un sous-dossier du projet , vous pouvez “Ajouter avec un lien”, et elles seront placées dans le répertoire racine.

J’ai eu le même problème avec Visual Studio 2010 / C # Project.

Pour les assemblages (c.-à-d. 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 localisez 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:

  • Build Action = “HelpFiles”
  • Copier vers OutputDirectory = “If Newer”

Cela a fonctionné pour moi exactement comme souhaité – pendant la construction, les fichiers .DLL sont copiés dans le répertoire de sortie sans le sous-dossier “\ lib”.