Net Target=4.5, Platform=AnyCPU和Prefer32Bit=off在win7 64位操作系统
本文关键字:off Prefer32Bit 64位 操作系统 win7 AnyCPU Target Platform Net | 更新日期: 2023-09-27 18:02:35
应用程序及其所有库都在Platform AnyCPU和Prefer32Bit关闭的情况下编译。应用程序使用currentDomain从嵌入式资源加载它的库。AssemblyResource事件。
该应用程序部署到100多台pc上,运行Windows 7、Vista、10、2008和2012。但是在一些Windows 7 Enterprise 64位pc上(不是全部),当应用程序加载嵌入式类库时,会抛出BadImageFormatException。JIT编译器在这些pc上以某种方式将类库编译为32位而不是64位,并且由于托管应用程序被编译为64位,因此抛出异常。
除了上面列出的因素(OS 64位,AnyCPU和Prefer32Bit关闭)之外,JIT编译器还会使用哪些因素来决定在加载类库时选择32位而不是64位?
一种可能是。net 64在x64上被禁用
从:https://stackoverflow.com/a/14857294/97471
有一个设置可以强制AnyCPU程序集作为32位运行x64操作系统。使用.Net2 x64目录下的ldr64.exe检查状态:
C: ' Windows ' Microsoft.NET ' Framework64 ' v2.0.50727> ldr64.exe查询加载kernel32……。检索GetComPlusPackageInstallStatusSetComPlusPackageInstallStatus入口点当前状态为:0x00000001 1 -表示"以64位运行AnyCPU"0 -表示"将AnyCPU运行为32位"
虽然我没有找到这样的实用程序在。net v4文件夹,设置也适用于Net4 AnyCPU组件。这个标志保存在DWORD中键下的注册表值Enable64BitHKEY_LOCAL_MACHINE ' '微软软件。NETFramework
这个设置似乎是在操作系统启动时加载的,并且只会更改注册表值在重启之前不会影响应用程序。改变了ldr64.exe的标志立即生效。
注意这个设置是系统范围的。缺省情况下,设置为Enable64Bit为1。似乎某些应用程序将其重置为0,并恢复返回值可能会导致应用程序出现问题。