【发布时间】:2011-05-04 18:52:54
【问题描述】:
短版:
我在 VS 2010 的 Asp.net MVC 应用程序中使用 64 位 dll (system.data.sqlite)。应用程序运行和调试正常,但在 Visual Studio 2010 中编辑时所有 aspx 和 ascx 页面都显示错误并且智能感知不起作用。
这是VS2010 regression bug。有人有解决办法吗?
(或)
有谁知道一个不会导致 32/64 位问题的免费、可靠、可用于生产的嵌入式数据库?
更多详情
显然这在 Visual Studio 2008 和 this has been is a known regression bug in Visual Studio 2010 for several months 中有效。我不想恢复到 VS 2008,也不想在 32 位模式下调试。
我有需要调试和部署为 64 位模式的 Web 应用程序,因为它使用一些非托管的 64 位 dll,例如 system.data.sqlite。另外,我更喜欢在 64 位模式下进行调试,因为它允许我们测试一些高内存用例。
经过一番折腾,Asp.net 将部署并运行良好。然而,所有的 aspx 和 ascx 页面都显示错误,并且在 Visual Studio 2010 中编辑它们时智能感知不起作用。显然这在 Visual Studio 2008 和 this has been is a known problem in Visual Studio 2010 for months 中有效。我不想恢复到 VS 2008。
有一个关于posted on SO here 的工作,但它在我的测试中不起作用,将调试限制为 32 位模式,而且感觉有点 hacky(我认为它只适用于 VS Express 风格的网站)。有没有人在 Web 应用程序中完成这项工作或有更好的解决方法?
对于那些感兴趣的人来说,Visual Studio 2010 在 64 位 dll 上还有另外两个问题,我已经设法解决了。
问题 1 - Cassini: Cassini 只能在 32 位模式下调试
解决方案 1 - CassiniDev 或 Localhost: 使用 localhost 调试或在 64 位模式下编译 CassiniDev (an opensoure variant of cassini)。我喜欢使用 cassini 调试新 Web 应用程序的零配置简单性,因此我使用了 CassiniDev。您只需将 dll 粘贴在 C:\Program Files (x86)\Common Files\microsoft shared\DevServer\10.0 中,它就可以工作了(我建议您备份 Cassini 版本,您将在编写时过度使用)。
问题 2 - MSTest:默认情况下,单元测试使用 MSTest fail to load 64bit dlls 运行。
解决方案 2 - AnyCPU 和 64 位主机进程 Instructions here,将 local.testsettings 设置为 AnyCPU 和 64 位主机进程
我开始认为整个设置太简单了,我正处于放弃和重组我的应用程序以不使用 64 位 dll 的边缘。我也对 Visual Studio 2010 导致所有这些问题感到非常失望。有人可以让 MS 修复他们创建的回归错误吗?
或者,
我们想使用嵌入式数据库。有谁知道不会导致 32/64 位问题的免费、可靠、生产就绪的可嵌入数据库?
【问题讨论】:
-
我也看过这个解决方案,但我不确定它是否适合我的用例。 scottbilas.com/blog/… 如果有人愿意重新编译 sqlite 以使用代理 dll 的东西,我很想听听它是怎么回事。
-
我倾向于 ManagedEsent managedesent.codeplex.com 我认为依赖具有 Microsoft.Isam.Esent.Interop 所需 dll 的 Windows 服务器是安全的,它比数据库更像是一个键值存储,但我认为它可能符合我的目的,把这些琐碎的事情抛在脑后。
标签: asp.net visual-studio-2010 dll 64-bit 32bit-64bit