По разным причинам мы используем ilmerge, чтобы поместить все сборки нашего приложения в один файл, поэтому пользователю нужно обрабатывать только один файл. К сожалению, похоже, что нет возможности объединить файлы .pdb со сборками. Кто-нибудь знает способ обойти это?
Есть ли способ объединить файлы pdb с ilmerge?
Ответы (1)
Хорошо, я понял это, хотя это заняло время.
В этой статье / ndebug написано наоборот.
Из примечаний к выпуску, поставляемых с ILMerge (ILMerge.doc, выделено мной):
2.8 DebugInfo public bool DebugInfo {get; установленный; } Если установлено значение true, ILMerge создает файл .pdb для выходной сборки и объединяет в него все файлы .pdb, найденные для входных сборок. Если вы не хотите, чтобы файл .pdb создавался для выходной сборки, либо установите для этого свойства значение false, либо укажите параметр / ndebug в командной строке. По умолчанию: true Параметр командной строки: / ndebug
Решение состоит в том, чтобы не иметь этот флаг в командной строке. ILMerge по умолчанию объединяет файлы pdb. Убедитесь, что все pdb-файлы ваших исходных сборок находятся в одном каталоге вместе с соответствующими dll, чтобы ILMerge мог их найти. (Мы используем ссылки на проекты и имеем один проект ILMerge, который выполняет это требование.)
Вот соответствующий раздел из моего файла csproj ILMerge.
<Target Name="AfterBuild">
<CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'">
<Output TaskParameter="Include" ItemName="IlmergeAssemblies" />
</CreateItem>
<Exec Command=""..\..\Libraries\Ilmerge.exe" /copyattrs /allowMultiple /out:"@(MainAssembly)" "@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ')" />
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>
Для полноты картины я использую последнюю версию ilmerge.exe: Версия 2.10.219.0 с датой последнего изменения 19.02.2010 9:49.