2010-03-24 257 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