2

我收到关于程序集“C:\Ora10g\bin\Zip.exe”的错误。问题是这个解决方案根本不使用 Oracle 中的任何东西。我在项目的任何地方都找不到对 10g 的单一引用。我从另一个离开我们小组的人那里继承了这个。他从来没有遇到过这个问题。我团队的另一位成员说他以前得到过这个,但重新安装 10g 的客户端部分修复了它。那里没有这样的运气。我什至尝试使用 WinGrep 在整个解决方案文件夹中搜索“Ora10g”,但它不存在。

有任何想法吗?在弄清楚如何摆脱对 Oracle 的错误引用之前,我无法构建此解决方案。

VS 2005 解决方案。包含几个 WinForm 应用程序、几个类库和一个 Web 服务。错误发生在主类库项目中。

这是错误消息:

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].
4

5 回答 5

4

赠品是“该模块应包含程序集清单”以及异常类型为System.BadImageFormatException. 有些东西正试图加载文件“C:\Ora10g\bin\Zip.exe”,就好像它是一个 .net 程序集一样,它要么:

  • 不是.net 程序集
  • 是一个 .net 程序集,但对于 CLR 的版本晚于您的目标版本
  • 是一个 .net 程序集,但是对于错误的“位数”(不太可能给出异常消息的“程序集清单”部分)。
  • 已损坏

你:

  1. 在文本编辑器中检查了您的解决方案文件 (.sln) 以查找对该文件的引用?
  2. (更有可能)检查了类库的 .csproj 文件,看它是否包含对该程序的任何引用?可能是有一个自定义 MSBuild 任务正在尝试加载该 EXE,可能是为了从构建过程中生成 ZIPped 输出。
  3. 验证您自己加载的任何程序集都没有直接或间接引用 Zip.exe 文件?
  4. 正如Dave Van den Eynde 所说,您是否检查过系统 .targets 文件(告诉 MSBuild 如何执行操作的文件)是否未更改?您可以在以下位置找到这些文件%windir%\Microsoft.NET\Framework\v2.0.50727

您可以尝试的其他事情:

  1. 按照错误消息中的说明并打开程序集绑定登录,然后查看日志以查看 Zip.exe 作为依赖项加载的内容。
  2. “Grep”你的整个硬盘驱动器为“zip.exe”,某处某处正在引用它,它可能不在你的项目/解决方案中(见第 4 点),但它可能在其他地方,Oracle 客户端的安装程序已损坏/改变。
于 2010-03-26T13:07:25.700 回答
0

当你重新安装你的 Oracle 客户端时,你把它放在哪里了?如果您使用安装程序中的默认位置,您的 ORACLE_HOME 将不在 c:\ora10g。目录 c:\ora10g\bin 是否存在?

一种可能的解决方法是创建目录 c:\ora10g\bin,然后从那里的 ORACLE_HOME\bin 目录中复制 zip.exe 文件。您的项目中显然有一些东西在该特定位置引用了 Oracle zip 二进制文件(在那里无法帮助您)。

于 2010-03-24T15:27:07.157 回答
0

此文件可能被您引用的程序集之一引用,从而导致间接依赖。

检查文件是否存在于目录中,如果存在,请确保该文件也存在于构建服务器中。

于 2010-03-26T13:06:05.680 回答
0

此外,请确保没有更改任何官方Targets文件。这些会自动导入到您的构建环境中。也许您也可以对它们进行 grep 操作?

更具体地说,您的前任可能已经修改了它们,以在他的所有项目中包含某种构建步骤。

于 2010-03-26T13:12:41.153 回答
0

您的应用程序实际上是否在 c:\ora10g 目录中?如果是这样,.Net 将尝试加载 \bin 目录中的每个程序集,无论您是否实际引用它。

于 2010-03-26T13:20:50.740 回答