Сбой задачи «ResolveAssemblyReference» и System.BadImageFormatException, но сборка нигде не используется!

2

Я получаю сообщение об ошибке "C:\Ora10g\bin\Zip.exe". Проблема в том, что это решение НЕ использует ничего в Oracle вообще. Я не мог найти ни одной ссылки на 10g в любом месте проекта. Я унаследовал это от другого человека, который покинул нашу группу. У него никогда не было этой проблемы. Другой член моей команды сказал, что он получил это раньше, но переустановка клиентской части в 10g исправил ее. Нет такой удачи. Я даже попытался использовать WinGrep для поиска всей папки решения для "Ora10g", но ее там не было.

Любые идеи? Я не могу построить это решение, пока не смогу понять, как избавиться от этой ложной ссылки на Oracle.

VS 2005. Содержит несколько приложений WinForm, несколько классов библиотек и веб-сервис. Ошибка возникает в проекте библиотеки основных классов.

Вот сообщение об ошибке:

Error   1   The "ResolveAssemblyReference" task failed unexpectedly.
System.BadImageFormatException: Could not load file or assembly 'C:\Ora10g\bin\Zip.exe' or one of its dependencies. The module was expected to contain an assembly manifest.
File name: 'C:\Ora10g\bin\Zip.exe'
   at System.Reflection.AssemblyName.nGetFileInformation(String s)
   at System.Reflection.AssemblyName.GetAssemblyName(String assemblyFile)
   at Microsoft.Build.Shared.AssemblyNameExtension.GetAssemblyNameEx(String path)
   at Microsoft.Build.Tasks.SystemState.GetAssemblyName(String path)
   at Microsoft.Build.Tasks.Resolver.FileMatchesAssemblyName(AssemblyNameExtension assemblyName, Boolean isPrimaryProjectReference, Boolean wantSpecificVersion, Boolean allowMismatchBetweenFusionNameAndFileName, String pathToCandidateAssembly, ResolutionSearchLocation searchLocation)
   at Microsoft.Build.Tasks.Resolver.ResolveAsFile(String fullPath, AssemblyNameExtension assemblyName, Boolean isPrimaryProjectReference, Boolean wantSpecificVersion, Boolean allowMismatchBetweenFusionNameAndFileName, ArrayList assembliesConsideredAndRejected)
   at Microsoft.Build.Tasks.Resolver.ResolveFromDirectory(AssemblyNameExtension assemblyName, Boolean isPrimaryProjectReference, Boolean wantSpecificVersion, String[] executableExtensions, String directory, ArrayList assembliesConsideredAndRejected)
   at Microsoft.Build.Tasks.AssemblyFoldersResolver.Resolve(AssemblyNameExtension assemblyName, String rawFileNameCandidate, Boolean isPrimaryProjectReference, Boolean wantSpecificVersion, String[] executableExtensions, String hintPath, String assemblyFolderKey, ArrayList assembliesConsideredAndRejected, String& foundPath, Boolean& userRequestedSpecificFile)
   at Microsoft.Build.Tasks.AssemblyResolution.ResolveReference(IEnumerable`1 jaggedResolvers, AssemblyNameExtension assemblyName, String rawFileNameCandidate, Boolean isPrimaryProjectReference, Boolean wantSpecificVersion, String[] executableExtensions, String hintPath, String assemblyFolderKey, ArrayList assembliesConsideredAndRejected, String& resolvedSearchPath, Boolean& userRequestedSpecificFile)
   at Microsoft.Build.Tasks.ReferenceTable.ResolveReference(AssemblyNameExtension assemblyName, String rawFileNameCandidate, Reference reference)
   at Microsoft.Build.Tasks.ReferenceTable.ResolveAssemblyFilenames()
   at Microsoft.Build.Tasks.ReferenceTable.ComputeClosure()
   at Microsoft.Build.Tasks.ReferenceTable.ComputeClosure(DependentAssembly[] remappedAssembliesValue, ITaskItem[] referenceAssemblyFiles, ITaskItem[] referenceAssemblyNames, ArrayList exceptions)
   at Microsoft.Build.Tasks.ResolveAssemblyReference.Execute(FileExists fileExists, DirectoryExists directoryExists, GetDirectories getDirectories, GetAssemblyName getAssemblyName, GetAssemblyMetadata getAssemblyMetadata, GetRegistrySubKeyNames getRegistrySubKeyNames, GetRegistrySubKeyDefaultValue getRegistrySubKeyDefaultValue, GetLastWriteTime getLastWriteTime)
   at Microsoft.Build.Tasks.ResolveAssemblyReference.Execute()
   at Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean& taskClassWasFound)

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
Теги:
badimageformatexception

5 ответов

4
Лучший ответ

Выдача: "Ожидается, что модуль будет содержать манифест сборки" и тот факт, что исключение имеет тип System.BadImageFormatException. Что-то пытается загрузить файл "C:\Ora10g\bin\Zip.exe", как если бы это была сборка .net, и это либо:

  • Не является сборкой .net
  • Является сборкой .net, но для версии CLR, которая позже, чем та, на которую вы нацеливаете
  • Является сборкой .net, но для неправильной "битности" (маловероятно, что часть манифеста сборки отображается в сообщении исключения).
  • Поврежден

Есть ли у вас:

  • Проверьте файл решения (.sln) в текстовом редакторе, чтобы найти ссылки на этот файл?
  • (скорее) Изучил файл .csproj для библиотеки классов, чтобы узнать, содержит ли он какие-либо ссылки на эту программу? Может быть, есть специальная задача MSBuild, пытающаяся загрузить этот EXE, возможно, для вывода ZIP файла из процесса сборки.
  • Проверено, что ни одна из сборок, которые вы загружаете, напрямую или косвенно ссылается на файл Zip.exe?
  • Как Дэйв Ван ден Эйнде сказал, вы проверили, что система .targets files (файлы, которые сообщают MSBuild, как делать то, что она делает) неизменны? Эти файлы можно найти в %windir%\Microsoft.NET\Framework\v2.0.50727

Другие вещи, которые вы можете попробовать:

  • Следуйте инструкциям в сообщении об ошибке и включите ведение журнала привязки Assembly, затем просмотрите журнал, чтобы узнать, что Zip.exe был загружен как зависимость.
  • "Grep" весь ваш жесткий диск для "zip.exe", что-то, где-то ссылается на него, и это может быть не в вашем проекте/решении (см. пункт 4), но может быть где-то еще, что установщик для Oracle Клиент поврежден/изменен.
  • 1
    +1 - отличные варианты.
  • 0
    @Ramesh, спасибо :) Сражаясь с файлом проекта, который сам "сделал что-то странное", прежде чем я понял, насколько это может быть неприятно. Тот, с которым я работал, вызывал EXE, который, как решил Касперский, означал, что DEVENV демонстрировал вирусное поведение и быстро закрывал его. Это сводило меня с ума, пытаясь тренироваться! Тогда я не знал о MSBuild - не говоря уже о том, что теперь я знаю о нем намного больше ....
Показать ещё 3 комментария
0

Кроме того, убедитесь, что ни один из официальных Targetets не был изменен. Они автоматически импортируются в вашу среду сборки. Возможно, вы тоже могли бы сделать grep?

Более конкретно, ваш предшественник мог изменить их, чтобы включить какой-то шаг построения во все его проекты.

0

Действительно ли ваше приложение находится в каталоге c:\ora10g? Если да .Net попытается загрузить каждую сборку в каталоге \bin, ссылаетесь ли вы на нее или нет.

  • 0
    Все мои проекты находятся в другом каталоге. C: \ Visual Studio 2005 \ Проекты.
0

На этот файл может ссылаться одна из ваших ссылок, вызывающая косвенную зависимость.

Проверьте, существует ли файл в каталоге, и если да, убедитесь, что файл также существует на сервере сборки.

  • 0
    Файл существует, сервер сборки отсутствует.
0

Когда вы переустановили своего клиента Oracle, куда его положили? Если вы использовали местоположение по умолчанию у установщика, ваш ORACLE_HOME не будет в c:\ora10g. Существует ли каталог c:\ora10g\bin?

Возможным обходным путем является создание каталога c:\ora10g\bin и копирование файла zip.exe из вашего каталога ORACLE_HOME\bin. В вашем проекте, по-видимому, есть что-то, что ссылается на двоичный файл Oracle zip в этом конкретном месте (не может вам помочь).

  • 0
    Каталог существует и содержит файлы. Разница лишь в том, что папка BIN вместо bin. Проблема в том, что этот файл НЕ (или НЕ ДОЛЖЕН) использоваться этим решением ВСЕ. Я не могу найти ссылку на него нигде, особенно в библиотеке, где выдается ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню