web-dev-qa-db-fra.com

Empêcher la copie de fichiers PDB Assembly et XML Assembly référencés

J'ai un projet Visual Studio 2008 C #/.NET 3.5 avec une tâche post-build pour compresser le contenu. Cependant, je constate que les fichiers .pdb (débogage) et .xml (documentation) des assemblys référencés sont également stockés dans mon répertoire de sortie (et Zip). 

Par exemple, si MyProject.csproj fait référence à YourAssembly.dll et que les fichiers YourAssembly.xml et YourAssembly.pdb se trouvent dans le même répertoire que le DLL, ils s'afficheront dans mon répertoire de sortie (et Zip).

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

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

106
Jason Morse

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

MsBuild.exe build.file /p:AllowedReferenceRelatedFileExtensions=none
59
mwjackson

Je souhaitais pouvoir ajouter et supprimer des assemblys référencés dans mon application principale tout en évitant la nécessité de conserver les fichiers que je devais supprimer ou exclure. 

J'ai fouillé dans Microsoft.Common.targets à la recherche de quelque chose qui fonctionnerait et j'ai trouvé la propriété AllowedReferenceRelatedFileExtensions. La valeur par défaut est .pdb; .xml. Je l'ai donc explicitement définie dans mon fichier de projet. Le problème, c'est que vous avez besoin de quelque chose (les espaces ne sont pas suffisants), sinon, vous utiliserez 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>
140
Jason Morse

Vous pouvez ajouter une commande d'événement Post Build similaire à del "$(TargetDir)YourAssembly*.xml", "$(TargetDir)YourAssembly*.pdb"

17
AndrewJacksonZA

C'est une question un peu ancienne, mais comme il n'y a pas de réponse quant à la façon de désactiver la génération de fichiers PDB et XML via une interface utilisateur, j'ai pensé qu'elle devrait être ici pour plus d'informations. 

Dans Visual Studio 2013: dans les propriétés du projet, sous l'onglet Compile, décochez "Générer le fichier de documentation XML", puis cliquez sur "Options de compilation avancées" ci-dessous et remplacez "Générer les informations de débogage" par "Aucune".

5
Dingo

Ma réponse est peut-être triviale maintenant, mais j'aimerais partager le script BAT que j'utilise pour supprimer les fichiers xml s'il existe une dll correspondante. C'est utile si vous voulez simplement nettoyer le dossier de sortie et que d'autres fichiers XML ne veulent pas être supprimés.

SETLOCAL EnableDelayedExpansion

SET targetDir=%1

ECHO Deleting unnecessary XML files for dlls

FOR %%F IN (%targetDir%*.xml) DO (

  SET xmlPath=%%~fF
  SET dllPath=!xmlPath:.xml=.dll!

  IF EXIST "!dllPath!" (
    ECHO Deleting "!xmlPath!"
    DEL "!xmlPath!"
  )
)

Usage:

Cleanup.bat c:\my-output-folder\

Il m'a fallu une heure pour terminer ce travail simple (grâce au "développement retardé") avec toutes sortes de recherches ici et là. J'espère que cela aidera d'autres débutants BAT comme moi.

0
Jeffrey Zhao

Je n’ai pas eu beaucoup de chance avec les autres réponses, j’ai enfin trouvé comment faire cela dans mon implémentation en utilisant la commande intégrée dans "Supprimer" , apparemment, il existe un moyen spécifique dont vous avez besoin pour implémenter des caractères génériques , c'est peu nuancé , voici tout ce dont vous avez besoin pour être placé dans votre "CSPROJ" ( TargetDir est une variable intégrée, incluse automatiquement) sous la balise "Project":

<Target Name="RemoveFilesAfterBuild">   
    <ItemGroup>
        <XMLFilesToDelete Include="$(TargetDir)\*.xml"/>
        <PDBFilesToDelete Include="$(TargetDir)\*.pdb"/>
    </ItemGroup>
    <Delete Files="@(XMLFilesToDelete)" />
    <Delete Files="@(PDBFilesToDelete)" />
</Target>

J'ai également eu des problèmes avec la génération de divers dossiers spécifiques à une langue. Si vous rencontrez ce problème également, vous pouvez également supprimer les dossiers inutilisés. J'ai choisi de ne déclencher que cela sous le type de construction "Release":

<ItemGroup>
    <FluentValidationExcludedCultures Include="be;cs;cs-CZ;da;de;es;fa;fi;fr;ja;it;ko;mk;nl;pl;pt;ru;sv;tr;uk;zh-CN;zh-CHS;zh-CHT">
        <InProject>false</InProject>
    </FluentValidationExcludedCultures> 
</ItemGroup>

<Target Name="RemoveTranslationsAfterBuild" AfterTargets="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <RemoveDir Directories="@(FluentValidationExcludedCultures->'$(OutputPath)%(Filename)')" />

    <ItemGroup>
        <XMLFilesToDelete Include="$(TargetDir)\*.xml"/>
        <PDBFilesToDelete Include="$(TargetDir)\*.pdb"/>
    </ItemGroup>
    <Delete Files="@(XMLFilesToDelete)" />
    <Delete Files="@(PDBFilesToDelete)" />
</Target>
0
David Rogers