Управление выводом файла pdb из файла определения сборки - PullRequest
1 голос
/ 16 декабря 2009

Я пытаюсь сгенерировать сборку релиза без сгенерированных файлов pdb. Я видел множество постов, в которых предлагается щелкнуть правой кнопкой мыши проект, выбрать «Свойства», перейти на вкладку «Сборка», а затем в «Дополнительно ...» и изменить «Отладочную информацию» на «Нет». Это работает и все, но мне нужно сделать это для сборки ~ 50 решений, которые содержат ~ 25 проектов каждый! В других публикациях упоминается редактирование соответствующего файла .csproj, но опять же, с таким большим количеством проектов, это займет много времени. Есть ли способ добиться этого через файл TFSBuild.proj?

Я попытался добавить следующее в файл TFSBuild.proj, но безуспешно.

<PropertyGroup>
  <Configuration>Release</Configuration>
  <Platform>AnyCPU</Platform>
</PropertyGroup>

<PropertyGroup>
  <DebugSymbols>false</DebugSymbols>
  <DebugType>none</DebugType>
  <Optimize>true</Optimize>
</PropertyGroup>

Следующая строка выводит Release | AnyCPU, none и false, но я все еще вижу файл .pdb в папке $ (OutputDir).

<Message Text="$Configuration|Platform): $(Configuration)|$(Platform)" />
<Message Text="DebugType is: $(DebugType)"/>
<Message Text="DebugSymbols is: $(DebugSymbols)"/>

Заранее спасибо, Urvi

1 Ответ

0 голосов
/ 17 декабря 2009

Я не совсем уверен (не установлена ​​сборка команды), но очень вероятно, что когда вы изменяете такие свойства в проекте TFSBuild, они не распространяются на ваши файлы фактических проектов, поскольку реальные решения / проекты созданный путем запуска другой задачи MSBuild, и ответственная цель в Microsoft.TeamFoundation.Build.targets не передает эти свойства задаче.

Например, это целевой "CallCompile" в вышеупомянутом файле (опять же, я не уверен, что это то, что использует ваш сценарий сборки, но идея та же):

<Target Name="CallCompile" DependsOnTargets="$(CoreCompileDependsOn)">
  <!-- Pass in all properties that users might want during the course of the compile targets. -->
  <MSBuild Projects="$(MSBuildProjectFile)"
           Properties="a lot of properties, but not DebugSymbols etc"
           Targets="CoreCompile">
  </MSBuild>
</Target>

Таким образом, вы могли бы уйти, добавив нужные свойства в файл целей, но:

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

Один из способов добиться того, чего вы хотите, - это написать скрипт на выбранном вами языке, который перечисляет все файлы * .csproj в определенном каталоге, а затем изменяет каждый файл, заменяя true на false. Или даже быстрее: выполните поиск по * .csproj в проводнике, сразу откройте все файлы в редакторе и выполните поиск / замену всех открытых файлов.

...