Сбой задачи ResolveAssemblyReference и System.BadImageFormatException, но сборка нигде не используется! - PullRequest
2 голосов
/ 24 марта 2010

Я получаю сообщение об ошибке сборки "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].

Ответы [ 5 ]

4 голосов
/ 26 марта 2010

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

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

Есть ли у вас:

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

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

  1. Следуйте инструкциям в сообщении об ошибке и включите ведение журнала привязки сборки, затем просмотрите журнал, чтобы увидеть, какой файл Zip.exe был загружен как зависимость.
  2. "Grep" весь ваш жесткий диск для "zip.exe", что-то, где-то ссылается на него, и оно может отсутствовать в вашем проекте / решении (см. Пункт 4), но это может быть где-то еще, что установщик для Oracle Клиент поврежден / изменен.
0 голосов
/ 26 марта 2010

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

0 голосов
/ 26 марта 2010

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

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

0 голосов
/ 26 марта 2010

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

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

0 голосов
/ 24 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...