Исключение ILMerge при попытке объединить файл pdb - PullRequest
11 голосов
/ 06 сентября 2011

Я пытаюсь объединить две сборки в одну сборку, которая работает тихо нормально. Тем не менее, когда я пытаюсь объединить файлы * .pdb, я получаю сообщение об ошибке:

Доступ к пути "F: \ Fentec \ Businessplan \ trunk \ Ausgabe \ Debug \ modules \ Planrechnung \ Planrechnung.pdb" запрещен.

Если я использую параметр / ndebug, чтобы пропустить объединение файлов * .pdb, оно работает нормально. Но, конечно, символы не могут быть загружены во время отладки. Сначала я думал, что при вызове ILMerge в событии postbuild, Planrechung.pdb используется и заблокирован. Я также попытался закрыть VS2010 и вызвать ILMerge из командной строки, но результат остался прежним. Я проверил с ProcessExplorer и нет никакого дескриптора файла.

Вот как я называю ILMerge:

E: \ XP \ Tools \ ILMerge \ ilmerge /targetplatform:v4,"D:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 "/ lib:" F: \ Fentec \ Businessplan \ trunk \ Ausgabe \ Debug \ bin "/out:Planrechnung.dll" F: \ Fentec \ Businessplan \ trunk \ Ausgabe \ Debug \ modules \ Planrechnung \ Planrechnung.dll "" F: \ Fentec \ Businessplan \ trunk \ Ausgabe \ Debug \ modules \ Mandantenverwaltung \ Mandantenverwaltung .dll "

Я что-то пропустил? Если вам нужна дополнительная информация, просто спросите.

Привет
Skalli

Ответы [ 2 ]

21 голосов
/ 07 сентября 2011

Я нашел решение проблемы, и это немного смущает.

Выходное имя не должно совпадать с именем одного из объединенных файлов pdb. В противном случае эта проблема возникает. Когда я сменил название сборки, она отлично работала. Также нет проблем перезаписать сборку в процессе, но вы не можете перезаписать существующий файл pdb.
Я не ожидал этого и случайно наткнулся на него. Извините за все неприятности

Привет,
Skalli

0 голосов
/ 06 сентября 2011

Мне кажется, что файл .pdb заблокирован, возможно, потому, что он используется в отладчике (например, Visual Studio).

Попробуйте закрыть и Visual Studio, и ваше приложение (если у вас уже есть't).

Если это не сработает, воспользуйтесь инструментом типа Process Explorer для поиска процессов, у которых этот файл открыт.В проводнике процессов вы можете сделать это, используя Find -> Find Handle или Dll ...:

Screenshot of the Process Explorer Search dialog

Введите имя файла / pdb, который вы ищете, и он будетперечислите все процессы, у которых этот файл открыт - либо закройте отдельные дескрипторы, либо убейте / закройте эти приложения и попробуйте снова.

...