該應用程序及其所有庫都使用Platform AnyCPU和Prefer32Bit關閉進行編譯。應用程序使用currentDomain.AssemblyResource事件從嵌入式資源加載它的庫。Win 7 64位操作系統上的Net Target = 4.5,Platform = AnyCPU和Prefer32Bit = off以32位運行
該應用程序已部署到超過100臺運行Windows 7,Vista,10,2008和2012的PC上。但在某些Windows 7 Enterprise 64位PC(不是全部)上,應用程序加載嵌入類時引發BadImageFormatException的庫。 JIT編譯器以某種方式解決這些PC上的類庫到32位而不是64,並且由於宿主應用程序編譯爲64位引發異常。
除了上面列出的JIT編譯器(OS 64位,AnyCPU和Prefer32Bit關閉)之外,還會使用其他哪些因素來決定在加載類庫時只選擇32位而不是64位?
如果你的應用程序由於外部引用而失敗32位(如BadImageFormatException暗示),那你爲什麼不只是爲64位編譯? –
該應用程序被部署到數百臺具有各種Windows版本和32位和64位混合的PC上。該應用程序是自動分發和保持最新的,迄今爲止,AnyCPU一直運行良好,直到最近它被部署到一個擁有Win 7 Enterprise 64位的客戶。在我們的實驗室中,我們安裝了Win 7 Enterprise的全新副本,並且工作正常。所以在Win 7安裝中有一些東西會導致JIT編譯器將其中一個類庫轉換爲32位而不是64位。 – Jeffrey