如何从MonoTouch应用程序中的单独程序集加载文件?

时间:2012-12-05 20:57:27

标签: c# ios sqlite xamarin.ios nunit

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

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

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

在测试项目中找不到任何内容。

查看

中的测试项目
/Users/me/Library/Application Support/iPhone Simulator/6.0/Applications/{GUID}/Test.app/ 

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

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

3 个答案:

答案 0 :(得分:2)

您无法在iOS应用程序之间共享文件 - 至少不能在设备上共享文件。

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

请注意,如果您想在设备上执行(或测试)此功能,则无效。

  

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

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

答案 1 :(得分:0)

我认为不建议使用'资源'作为foldername,并且可能会产生问题。 您还应该将构建操作设置为“内容”

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

答案 2 :(得分:0)

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

我们在app项目中保留了所有相同内容。然后在测试项目中:

  1. 右键单击文件夹,然后选择添加 - >添加文件...
  2. 从应用项目中选择数据库文件
  3. 点击确定
  4. 在弹出窗口中选择“添加指向文件的链接”
  5. 点击确定
  6. 测试项目现在有一个指向db.sqlite3文件的链接,并且所有数据库测试都通过了。

    感谢您指导我们寻求解决方案。

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