我有一个引用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试图做同样的事情而且他放弃了哪个不太有帮助!!
答案 0 :(得分:1)
确保所有托管程序集都在项目属性中定位x86
而不是Any CPU
或x64
。
答案 1 :(得分:0)
最好你应该在64位模式或任何CPU模式下构建非托管dll。有时它会加载32位程序集,同时我们在托管应用程序的应用程序池中启用32位应用程序。如果它不使用此选项,则应使用64位库替换它。还要回收应用程序池并重新启动iis。希望它能奏效。