2011-03-08 40 views
4

我有一个大的Web应用程序,它应该在64位进程中运行。但是,当我在App Pool上将“启用32位应用程序”设置为False时,出现以下错误,试图在IE中运行应用程序:如何使用进程监视器来确定哪个DLL导致BadImageFormatException

不是有效的Win32应用程序。 (来自HRESULT的异常:0x800700C1)

错误消息开头的应用程序名称缺失,即我在复制和粘贴过程中没有丢失它。

我被建议使用进程监视器来确定哪个应用程序/ DLL负载实际上导致错误,但我不知道从哪里开始。有人可以请指教吗?

编辑:我已经尝试过滤进程监视器上只有w3wp.exe和只有文件系统和进程事件,但只是试图导航到根URL产生34,012事件。

回答

1

创建一个仅构建为x64的控制台应用程序,并使用它在负载之间动态加载所有引用的dll的控制台输出。当控制台应用程序无法加载某个dll时,您会知道它是哪一个。

+0

这是一个很好的策略,但这个解决方案是一个非常复杂的依赖关系。它包含320个项目,其中20个是引用其余项目的Web项目,并被1个核心Web项目引用。星期天需要一年时间才能应用您的策略。 – ProfK 2011-03-09 16:54:09

+0

@ProfK,无论有多少dll,都可以使用'Directory.GetFiles'递归查找项目层次结构中的所有dll,并逐个加载它们。你不需要你的控制台来实际引用它们,用反射来加载它们。 – 2011-03-10 13:55:31

+0

我想我会实际做到这一点,当我可以再次重现这种情况。 – ProfK 2011-03-11 10:52:06

0

我假设这是一个ASP.Net应用程序。您是否已将您的主要网络项目平台目标设置为x86。

你可以在找到该设置项目属性|构建|平台目标

也做任何你的项目引用任何第三方库?如果是这样,你知道他们是32位还是64位dll?

+0

这是一个ASP.NET应用程序(因此标签),但主项目设置为'任何CPU'。这个应用程序应该构建为64位应用程序,但我目前正在扫描很长的引用库列表,以检查1是否可能设置为x86。 – ProfK 2011-03-09 07:59:37

相关问题