Предотвращение ссылки на сборку PDB и XML-файлов, скопированных на выход - PullRequest
113 голосов
/ 06 января 2010

У меня есть проект Visual Studio 2008 C # / .NET 3.5 с задачей посткомпоновки для архивирования содержимого.Однако я обнаружил, что я также получаю файлы .pdb (отладка) и .xml (документация), на которые есть ссылки в моей выходной директории (и ZIP).

Например, если MyProject.csproj ссылается на YourAssembly.dll и файлы YourAssembly.xml и YourAssembly.pdb находятся в том же каталоге, что и DLL, они будут отображаться в моем выходном каталоге (и ZIP).

Я могу исключить * .pdb при ZIP-архивировании, но не могу полностью исключить файлы * .xml, так как у меня есть файлы развертывания с таким же расширением.

Есть ли способ предотвратить копирование проектассылки на сборочные файлы PDB и XML?

Ответы [ 8 ]

144 голосов
/ 20 февраля 2010

Я хотел иметь возможность добавлять и удалять ссылочные сборки в своем основном приложении, избегая при этом необходимости поддерживать, какие файлы мне нужно было удалить или исключить.

Я копался в Microsoft.Common.targets, искал что-то, что могло бы работать, и нашел свойство AllowedReferenceRelatedFileExtensions. По умолчанию он равен .pdb; .xml, поэтому я явно определил его в файле проекта. Уловка в том, что вам нужно что-то (пробелов недостаточно), иначе оно все равно будет использовать значение по умолчанию.

<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>
61 голосов
/ 06 января 2012

Вы также можете указать это через командную строку:

MsBuild.exe build.file /p:AllowedReferenceRelatedFileExtensions=none
17 голосов
/ 06 января 2010

Вы можете добавить команду события Post Build, аналогичную del "$(TargetDir)YourAssembly*.xml", "$(TargetDir)YourAssembly*.pdb"

5 голосов
/ 13 апреля 2015

Это довольно старый вопрос, но, поскольку нет ответа на вопрос о том, как отключить создание файлов PDB и XML с помощью пользовательского интерфейса, я решил, что он должен быть здесь для полноты картины.

В Visual Studio 2013: в свойствах проекта на вкладке компиляции снимите флажок «Создать файл документации XML», затем нажмите «Дополнительные параметры компиляции» ниже и измените «Создать информацию отладки» на «Нет», и это будет делать трюк.

0 голосов
/ 11 марта 2019

Мне не очень повезло с другими ответами, я наконец понял, как это сделать в моей реализации, используя встроенную команду «Удалить» , по-видимому, вам нужен конкретный способ реализовать подстановочные знаки , это немного нюансов , вот все, что вам нужно поместить в ваш "CSPROJ" ( TargetDir - встроенная переменная, включается автоматически) в тег "Проект":

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

У меня также были проблемы с созданием папок для разных языков, если у вас тоже есть такая проблема, вы также можете удалить неиспользуемые папки для разных языков. Я выбрал запуск только под типом сборки "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 голосов
/ 30 января 2019

Мой ответ сейчас может быть тривиальным, но я хотел бы поделиться сценарием BAT, который я использую для удаления XML-файлов, если для него есть соответствующая DLL. Это полезно, если вы просто хотите очистить выходную папку и иметь другие XML-файлы, которые не хотите удалять.

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!"
  )
)

Использование:

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

Мне потребовался час, чтобы закончить эту простую работу (благодаря «отложенному расширению») со всеми типами поиска здесь и там. Надеюсь, что это поможет другим новичкам BAT, как я.

0 голосов
/ 14 июня 2018

Зачем вообще генерировать файлы .pdb и .xml, если они вам не понадобятся? Вы можете просто отключить создание символов отладки и файла документации в свойствах вашего проекта & rarr; Build (& rarr; Advanced & hellip; ). (Вероятно, только для Release сборки.)

0 голосов
/ 08 января 2014

Если вы хотите исключить только файлы XML (например, отладочную версию), вы можете сделать что-то вроде этого:

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

Как правило, каждое перечисленное расширение (разделенное точкой с запятой) будет исключено.

...