Предотвращение ссылок на сборку PDB и XML файлов, скопированных на вывод

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

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

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

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

Ответ 1

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

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

Ответ 2

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

Я вырыл 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>

Ответ 3

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

Ответ 4

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

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

Ответ 5

Мой ответ может быть тривиальным, но я хотел бы поделиться сценарием 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, как я.

Ответ 6

Зачем вообще создавать файлы .pdb и .xml, если они вам не нужны? Вы можете просто отключить отладку символов и генерацию файла документации в вашем проекте Свойства → Сборка (→ Дополнительно…). (Вероятно, только для сборки Release.)

Ответ 7

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

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

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