1

我有一个包含几个项目的 MonoTouch 解决方案。其中一个项目是一个可执行项目。它有一个 SQLite3 数据库文件,即 ./Resources/db.sqlite3。它在其属性中设置为 BundleResource。然后,我有一个第一个测试项目。

有没有办法从测试项目中加载第一个项目的数据库?除了将数据库文件复制到测试项目中,这并不理想,我还没有找到方法。

NSBundle.MainBundle.PathForResource("db", "sqlite3"); 

在测试项目中找不到任何东西。

查看里面的测试项目

/Users/me/Library/Application Support/iPhone Simulator/6.0/Applications/{GUID}/Test.app/ 

我没有看到实际的项目程序集,只是它的别名。这似乎是它应该的样子,因为它仍然可以访问类文件并且所有非数据库测试都通过了。

谷歌搜索没有发现任何问题;在这里搜索也没有,只是从你已经在的程序集中加载东西。

4

3 回答 3

2

您不能跨 iOS 应用程序共享文件——至少不能在设备上。

如果您知道(例如使用绝对路径)或猜测您想要的文件的路径,您可以使用模拟器解决这个问题。

请记住,如果您想在设备上执行(或测试)它,这将不起作用。

我没有看到实际的项目程序集,只是它的别名。

在某些情况下(并且仅在模拟器上)MonoTouch 将使用符号链接而不是复制文件。这使得模拟器上的编辑/构建/调试周期更快。

于 2012-12-05T21:33:55.527 回答
0

我认为不建议使用“资源”作为文件夹名称,这会带来问题。此外,您应该将构建操作设置为“内容”

在主应用程序项目中引用包含文件的项目。从包含 db 文件的项目中实例化至少一个类/对象。这可以是一个虚拟类。现在,编译器将在编译时将具有构建操作“内容”的引用项目中的所有内容复制到应用程序包。

于 2012-12-05T23:15:03.317 回答
0

在浏览和尝试 svn 的建议时,我和一位同事注意到您可以在项目中添加指向现有文件的链接。

我们在应用程序项目中保持一切不变。然后在测试项目中:

  1. 右键单击文件夹并选择添加->添加文件...
  2. 从应用项目中选择数据库文件
  3. 点击确定
  4. 在弹出窗口中选择“添加文件链接”
  5. 点击确定

测试项目现在有一个指向 db.sqlite3 文件的链接,并且我们所有的数据库测试都通过了。

感谢您指导我们找到解决方案。

另外,我想指出我没有创建一个名为 Resources 的文件夹,我知道它是保留的,我只是用它来保存数据库的副本。它被复制到 /Documents 并从中使用,以便我们可以写入它。

于 2012-12-06T13:31:37.027 回答