2010-01-06 5 views
89

J'ai un projet Visual Studio 2008 C#/.NET 3.5 avec une tâche de post-construction pour compresser le contenu. Cependant, je trouve que j'obtiens aussi les fichiers .pdb (debug) et .xml (documentation) des assemblys référencés dans mon répertoire de sortie (et ZIP). Par exemple, si MyProject.csproj fait référence à YourAssembly.dll et qu'il existe des fichiers YourAssembly.xml et YourAssembly.pdb dans le même répertoire que la DLL, ils apparaîtront dans mon répertoire de sortie (et ZIP).Prévention de l'assemblage référencé Fichiers PDB et XML copiés en sortie

Je peux exclure * .pdb lors de la fermeture, mais je ne peux pas exclure les fichiers * .xml car j'ai des fichiers de déploiement avec la même extension.

Existe-t-il un moyen d'empêcher le projet de copier des fichiers PDB et XML d'assembly référencés?

Répondre

123

Je voulais être en mesure d'ajouter et de supprimer des ensembles référencés dans ma demande principale tout en évitant la nécessité de maintenir les fichiers que je devais supprimer ou exclure.

J'ai creusé à travers Microsoft.Common.targets à la recherche de quelque chose qui fonctionnerait et trouvé la propriété AllowedReferenceRelatedFileExtensions. Il est par défaut .pdb; .xml donc je l'ai explicitement défini dans mon fichier de projet. Le hic, c'est que vous avez besoin de quelque chose (les espaces ne sont pas suffisants) sinon il utilisera toujours la valeur par défaut.

<Project ...> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    ... 
    <AllowedReferenceRelatedFileExtensions> 
     <!-- Prevent default XML and PDB files copied to output in RELEASE. 
      Only *.allowedextension files will be included, which doesn't exist in my case. 
     --> 
     .allowedextension 
    </AllowedReferenceRelatedFileExtensions> 
    </PropertyGroup> 
+0

Intéressant. Content que le problème ait été résolu. – AndrewJacksonZA

+3

Cela pourrait être le "correct" moyen, mais il est tellement caché qui est mauvais dans mes livres. –

16

Vous pouvez ajouter un message Créer commande d'événement semblable à del "$(TargetDir)YourAssembly*.xml", "$(TargetDir)YourAssembly*.pdb"

+0

Merci. Cela fonctionne si vous avez une liste statique d'assemblys référencés. Dans notre cas, cependant, nous en avions plus de deux douzaines, et beaucoup d'entre elles étaient en mouvement pendant que nous refaçonnions. –

+3

Personnellement, je pense que c'est la bonne réponse - l'autre façon que vous avez piraté le fichier de projet et quelqu'un d'autre (ou vous-même des années plus tard) ne saurais pas où chercher pour éviter cela. –

+1

Je préfère aussi cette façon de faire. J'aime laisser tout ce qui doit arriver (ou a été conçu pour arriver en premier lieu) pour finir et ensuite laisser les événements de post-construction faire comme je le veux à la fin. Il semble juste tellement plus propre de cette façon! –

49

Vous pouvez également spécifier via la ligne de commande:

MsBuild.exe build.file /p:AllowedReferenceRelatedFileExtensions=none 
+6

Cela ressemble à la route à suivre car vous pouvez simplement l'inclure dans vos arguments MSBuild de définition de construction et ne pas avoir à pirater les fichiers csproj. –

+0

Cela fonctionne très bien à partir de TFS et évite d'avoir à modifier 100s de projets dans mon cas –

-3

Si vous ne souhaitez que d'exclure les fichiers XML (pour dire une version de débogage) vous pouvez faire quelque chose comme ceci:

<AllowedReferenceRelatedFileExtensions> 
    <!-- Prevent default XML from debug release --> 
     *.xml 
</AllowedReferenceRelatedFileExtensions> 

Fondamentalement, chaque extension (délimitée par un point-virgule) sera exclue.

+1

Cette question et sa réponse acceptée ont 4 ans, et votre réponse est presque un copier-coller de la réponse acceptée. – Zack

+1

Ce qui est différent est la syntaxe pour les fichiers XML seulement ce dont j'avais besoin. J'ai dû faire des recherches pour la syntaxe correcte de cette balise. J'ai trouvé la réponse originale utile et votée, mais j'ai pensé que je pourrais sauver quelqu'un d'autre si elle avait juste besoin de filtrer un type de fichier spécifique. – ProVega

+10

Mais cela n'inclura * pas * les fichiers xml, ne l'exclut-il pas? –

3

Il s'agit d'une question plutôt ancienne, mais comme il n'y a pas de réponse sur la façon de désactiver la génération de fichiers PDB et XML via l'interface utilisateur, j'ai pensé qu'il devrait être ici pour l'exhaustivité. Dans Visual Studio 2013: dans les propriétés du projet, sous l'onglet de compilation, décochez la case "Générer le fichier de documentation XML", puis cliquez sur "Options de compilation avancées" et remplacez "Générer les informations de débogage" par "Aucun". faire l'affaire.

+7

Cela n'affectera pas les paquets nuget que vous incluez, ils auront toujours les fichiers 'pdb' et' xml'. – Lankymart

+0

J'utilise les propriétés OctoPack dans mon fichier csproj et cela a fait l'affaire pour mes fichiers PDB et XML. J'utilisais également VS 2015. Build -> Advanced sous Output -> Définir les informations de débogage sur none sous Output –

Questions connexes