2010-03-24 252 views
2

我收到有关程序集“C:\ Ora10g \ bin \ Zip.exe”的错误。麻烦的是,这个解决方案根本不在Oracle中使用任何东西。在项目的任何地方我都找不到10g的单一引用。我从另一个离开我们小组的人那里继承了这个。他从未有过这个问题。我的团队的另一位成员表示他之前得到了这个,但重新安装了10g的客户端部分。那里没有这样的运气。我甚至尝试使用WinGrep搜索整个解决方案文件夹中的“Ora10g”,但它不在那里。“ResolveAssemblyReference”任务失败并且System.BadImageFormatException,但程序集不在任何地方使用!

任何想法?在我能弄清楚如何摆脱这种对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

该赠品是“该模块预计包含程序集清单”,并且该例外类型为System.BadImageFormatException。一些试图加载文件“C:\ ORA10G \ BIN \ Zip.exe”,如果它是一个.NET程序集,它可以:

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

您有:

  1. 审查在文本编辑器中的解决方案文件(的.sln),以寻找到该文件的引用?
  2. (更可能)检查类库的.csproj文件以查看它是否包含对此程序的任何引用?可能是因为有一个自定义的MSBuild任务试图加载该EXE,可能会从构建过程中产生ZIP压缩输出。
  3. 已验证您加载的程序集都不直接或间接引用Zip.exe文件?
  4. 作为Dave Van den Eynde said,您是否检查过系统.targets文件(告诉MSBuild如何执行它的文件)是否保持不变?您可以在%windir%\Microsoft.NET\Framework\v2.0.50727

其他的事情找到这些文件,你可以尝试:

  1. 按照错误消息的指示,把集绑定日志记录,然后查看日志,看看有什么邮编。 exe被加载为依赖项。
  2. “grep”你的整个硬盘“zip.exe”,有些地方在引用它,它可能不在你的项目/解决方案中(见第4点),但它可能是其他地方的Oracle安装程序客户已损坏/更改。
+1

+1 - 极好的选择。 – Ramesh 2010-03-26 13:13:35

+0

@Ramesh,谢谢:)在我知道自己有多令人沮丧之前,我已经和一个“做了奇怪的事情”的项目文件做了一场战斗。与我一起工作的是调用卡巴斯基决定的EXE,意味着DEVENV正在展示病毒行为并及时关闭它。它驱使我尝试着解决问题!我当时并不知道MSBuild - 不用说我现在知道更多关于它的信息...... – Rob 2010-03-26 13:20:32

+0

另一位团队成员表示,他通过重新安装Oracle来解决这个问题。这对我没有用。我找不到任何有关Oracle项目文件的参考资料。 我的猜测是损坏的。无论如何,我升级到VS2008,除了改变XSD文件的名字,一切似乎都没问题。我能够毫无错误地进行构建。 升级过程中会发生什么影响项目的情况? – bdwakefield 2010-03-28 01:22:13

0

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

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

+0

该目录存在并且包含其中的文件。唯一的区别是该文件夹是BIN而不是bin。 问题是这个文件不是(或者不应该)被这个解决方案使用。我无法在任何地方找到任何引用,特别是在错误引发的库中。 – bdwakefield 2010-03-24 16:45:27

0

此文件可能会引用您的引用程序集之一引起间接依赖项。

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

+0

文件存在,没有构建服务器。 – bdwakefield 2010-03-28 01:16:48

0

此外,请确保没有官方Targets文件已更改。这些会自动导入到您的构建环境中。也许你可以对他们做一个grep?

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

0

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

+0

我的所有项目都在不同的目录中。 C:\ Visual Studio 2005 \ Projects。 – bdwakefield 2010-03-28 01:17:41