2011-02-01 150 views
0

我正在开发一个ASP.NET应用程序,并试图在我的64位win 7机器上使用64位驱动程序版本的ODBC,因为部署服务器具有Windows Server 2008,它是自然在64位,因为微软决定不做一个32位版本afaik。Win 7和ODBC的64位

的第一个问题是一个System.Data.Odbc.OdbcException“ERROR [IM014] [微软] [ODBC驱动程序管理器]指定的DSN包含驱动程序和应用程序之间的结构不匹配”。尽管我正在开发一个64位操作系统,但编译器似乎决定编译32位。经过一些研究后,我将每个(自己的)程序集中的目标平台更改为x64。我使用的是NHibernate和Spring.Net,但是我读了一些对于NHibernate来说64位没有问题的地方。我没有检查Spring.Net。汇编开始了。

我收到了一些警告,说每个.net程序集都是为另一个平台而构建的,但我再次在某处读到我可以忽略这些警告,并且应用程序应该运行得很好,因为运行时(或编译器?)会计算出正确的组装。

因此,我立即测试了应用程序,并获得System.BadImageFormatException(错误格式)的奖励。这又是一个关于32/64位问题的例外,虽然我的每个程序集都被编译为64位。

我慢慢开始讨厌64位。认真。在具有64位驱动程序的64位服务器的64位操作系统上构建64位应用程序很困难吗?

有没有人有解决方案或有这方面的经验?我发现了许多使用32位的解决方法,但这不是一个选项。它必须是一个64位解决方案。

不过我会继续努力解决这个问题。我会在这里写下任何进展。

更新: Spring.Net似乎因为组件“在运行时动态编译为本地机器架构”是在64位就好了。

回答

0

我通常会尝试其他方式:如果我不需要任何本地进程内DLL,我使用AnyCPU。所以最终的程序可以在x86和x64上使用。如果我需要本地进程DLL,我总是选择x86 32位版本,因为它使得它正常工作更容易,并且重要的是我不需要任何64位功能。那么为什么64位版本?我只是去IIS配置和设置我的asp.net应用程序运行在32位模式。

例如,我目前的开发环境完全是64位,并且工作完美。但我的生产服务器设置为在32位模式下托管我的应用程序。它完美的工作,没有64位的问题。我很抱歉,如果这个答案不适合你,但我真的不需要我的asp.net应用程序中的64位的东西。

更新:我在生产服务器上使用32位IIS。我不确定是否可以在64位IIS中将asp.net设置为32位。

+0

不幸的是它是关于组件之间的兼容性(应用程序<-> 64位odbc驱动程序)而不是64位的东西。但我读了32位模式,但我宁愿想想那是我的最后一招。 – Robert 2011-02-01 19:55:25

1

我打了几个小时这个相同的错误。我的环境稍有不同,但错误是一样的。我在Win Server 2008 R2 x64 Box上使用SSRS,Report Builder 3和SQL Server 2008 R2 我可以创建连接并在SSRS中成功测试它们,但是当我使用它们时,我得到了上述错误。当我创建一个具有相同名称和参数的32位DSN时,它已经解决了。