2009-09-17 1 views
19

По различным причинам мы используем ilmerge, чтобы поместить все наши сборки приложений в один файл, чтобы пользователь мог обрабатывать только один файл. К сожалению, похоже, что невозможно слить файлы .pdb с сборками. Кто-нибудь знает способ обойти это?Есть ли способ объединить файлы pdb с ilmerge?

+0

но зачем вам это нужно ? вы хотите добавить как ресурс? –

+5

Когда приложение выходит из строя, трассировка стека просто показывает имя функции, которая не удалась. С файлом pdb вдоль исполняемого файла он также показывает номер строки в исходном файле, где произошла ошибка. – pat

ответ

24

Хорошо, я понял это, хотя это заняло некоторое время.

Эта статья имеет/ndebug точно в обратном порядке.

Из выпуска нот, которые приходят с ILMerge (ILMerge.doc, курсив мой):

2,8 DebugInfo общественного BOOL DebugInfo {получить; задавать; } Когда это значение равно true, ILMerge создает файл .pdb для сборки вывода и объединяет в нее любые файлы .pdb, найденные для входных сборок. Если вы не хотите .pdb файл, созданный для выходного узла, либо установить это свойство ложно, либо указать опцию/NDEBUG в командной строке . По умолчанию: истинно Командная строка вариант:/NDEBUG

Решение специально для не иметь этот флаг на командной строке. ILMerge будет объединять файлы pdb по умолчанию. Убедитесь, что все файлы pdb ваших исходных сборок находятся в одном каталоге вместе со связанными с ними DLL, чтобы ILMerge мог их найти. (Мы используем ссылки на проекты и имеем один проект ILMerge, который выполняет это требование.)

Вот соответствующий раздел моего файла ILMerge csproj.

<Target Name="AfterBuild"> 
    <CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'"> 
     <Output TaskParameter="Include" ItemName="IlmergeAssemblies" /> 
    </CreateItem> 
    <Exec Command="&quot;..\..\Libraries\Ilmerge.exe&quot; /copyattrs /allowMultiple /out:&quot;@(MainAssembly)&quot; &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 
    <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" /> 
    </Target> 

Для полноты я использую последнюю версию ilmerge.exe: Version 2.10.219.0, с датой последнего изменения 2/19/2010 9:49 AM

-3

Вы можете объединить их для вас, используя флаг/ndebug в команде.

Этот article объясняет больше.

+0

Спасибо за информацию. По какой-то причине коммутатор просто держит ilmerge от создания файла pdb в дополнение к объединенной сборке, но не помещает информацию в объединенную сборку. Я опубликую обновление, когда узнаю, что происходит не так. – pat

+1

У меня такая же проблема, как @longeasy./ndebug не помогает вообще. –

+1

/ndebug объединит несколько pdb в один, как и в сборках. Вопрос заключается в том, как объединить сборки с файлами pdb, так что это всего один файл. – Lucas