У меня есть веб-сервис, который выдает исключение BadImageFormatException каждый раз, когда я пытаюсь запустить сервис из Visual Studio. Этот ответ на другой вопрос предложил запустить peverify для DLL-файлов, чтобы увидеть, есть ли какие-либо проблемы.Хотя DLL моей веб-службы в порядке, веб-служба зависит от сборки ILMerged, в которой есть ошибки:
[IL]: ошибка: [C: \ blah \ MyILMergedAssembly.dll: шифрование
Utils.SecureStringExtensions :: SecureEquals] [смещение 0x00000055] [найден неуправляемый указатель] [ожидается неуправляемый указатель] Неожиданный тип в стеке.
[IL]: ошибка: [C: \ blah \ MyILMergedAssembly.dll: шифрование
Utils.SecureStringExtensions :: SecureEquals] [смещение 0x0000005D] [найден неуправляемый указатель] [ожидается неуправляемый указатель] Неожиданный тип в стеке.
[IL]: ошибка: [C: \ blah \ MyILMergedAssembly.dll: Шифрование
Utils.SecureStringExtensions :: SecureEquals] [offset 0x0000007E] Неуправляемые указатели не являются проверяемым типом.
3 Проверка ошибок. \ MyILMergedAssembly..dll
(188 предупреждений)
Я думаю, это связано с моим использованием Marshal
и IntPtr
в MyILMergedAssembly, но везде, где я это делаю, у меня объявлен методкак unsafe
.Как я могу избавиться от ошибок, которые дает peverify, и, надеюсь, избавиться от BadImageFormatException, который появляется, когда я пытаюсь запустить свой веб-сервис?
Edit: похоже, что я могуне используйте ILMerge для объединения сборок с небезопасным кодом.Поэтому я попытался, чтобы мой веб-сервис ссылался на все отдельные библиотеки DLL в MyILMergedAssembly, но я все еще получаю исключение BadImageFormatException.Теперь это дает мне исключение на одном из отдельных собраний.Когда я запускаю peverify для этой отдельной сборки, я получаю:
[IL]: ошибка: [C: \ blah \ Connection.dll: соединение
.ConnectionBase ::. Ctor] [HRESULT 0x80070002] - Системе не удается найти указанный файл.
Класс ConnectionBase
, на который он ссылается, находится прямо в Connection.dll, или, по крайней мере, так должно быть, поскольку классопределяется в пространстве имен / проекте Connection.Соединение имеет «Разрешить небезопасный код», отмеченный в параметрах сборки.Конструктор в ConnectionBase
, на который он может ссылаться, помечен как internal
.
Редактировать: Я пытался проверить «Разрешить небезопасный код» в проекте веб-службы, который используетDLL с небезопасным кодом.Я также попытался добавить compilerOptions="/unsafe"
в файл Web.config для веб-службы в узле system.codedom> compilers> compiler.Я по-прежнему получаю страницу со следующими сведениями при запуске веб-службы:
Не удалось загрузить файл или сборку «Соединение» или одну из ее зависимостей.Была предпринята попытка загрузить программу с неверным форматом.