在IIS 7.5上,32位DLL无法加载Enable32Mode

时间:2011-06-12 08:30:46

标签: .net asp.net-mvc iis iis-7 windows-server-2008

我有一个引用32位DLL的MVC 3网站。操作系统是Windows 2008 R2 x64。该网站位于ASP.NET 4应用程序池中。我已打开Enable32Bit但它不起作用。我得到一个错误的图像异常,但无法找到在IIS中转换此级别的登录。我已经设置了一个页面,输出它是运行32位还是64位,当我打开/关闭AppPool上的Enable32Bit时,我得到了正确的输出。该网站也是完全信任的。

我无法尝试并让它发挥作用。我知道它适用于Win7 32bit。

你能提出一些建议吗?

更新:我刚刚写了一个简单的Windows窗体应用程序,上面有一个调用我的DLL的按钮。这是用x86的目标构建的,它工作正常,所以我认为IIS或ASP.Net存在问题。以下是用于引用DLL的代码:

        [DllImport("CDCrypt.dll")]
        [return: MarshalAs(UnmanagedType.LPStr)]
        public static extern String Encrypt([MarshalAs(UnmanagedType.LPStr)] String aName);



        [DllImport("CDCrypt.dll")]
        [return: MarshalAs(UnmanagedType.LPStr)]
        public static extern String Decrypt([MarshalAs(UnmanagedType.LPStr)] String aName);

更新2: ASP.Net Pipeline是Clasic还是Integrated?我已经尝试了两个但同样的问题,但认为值得问一下

更新3 :我发现这个question试图做同样的事情而且他放弃了哪个不太有帮助!!

2 个答案:

答案 0 :(得分:1)

确保所有托管程序集都在项目属性中定位x86而不是Any CPUx64

答案 1 :(得分:0)

最好你应该在64位模式或任何CPU模式下构建非托管dll。有时它会加载32位程序集,同时我们在托管应用程序的应用程序池中启用32位应用程序。如果它不使用此选项,则应使用64位库替换它。还要回收应用程序池并重新启动iis。希望它能奏效。