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

C# 如何在MonoTouch应用程序中从单独的程序集中加载文件?,c#,ios,sqlite,xamarin.ios,nunit,C#,Ios,Sqlite,Xamarin.ios,Nunit,我有一个MonoTouch解决方案,其中包含一些项目。其中一个项目是可执行项目。它有一个SQLite3数据库文件,即./Resources/db.SQLite3。在其属性中将其设置为BundleResource。然后,我有一个第一个测试项目 有没有办法从测试项目中加载第一个项目的数据库?除了将数据库文件复制到不理想的测试项目之外,我还没有找到一种方法 NSBundle.MainBundle.PathForResource("db", "sqlite3"); 在测试项目中找不到任何内容 查看内

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

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

NSBundle.MainBundle.PathForResource("db", "sqlite3"); 
在测试项目中找不到任何内容

查看内部的测试项目

/Users/me/Library/Application Support/iPhone Simulator/6.0/Applications/{GUID}/Test.app/ 
我看不到实际的项目程序集,只看到它的别名。这似乎是应该的,因为它仍然可以访问类文件,并且所有非数据库测试都通过了


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

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

如果您知道(例如,使用绝对路径)或猜测所需文件的路径,您可以使用模拟器对此进行破解

请记住,如果要在设备上执行(或测试)此操作,则此操作将无效。

我看不到实际的项目程序集,只看到它的别名


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

我认为不建议将“资源”用作文件夹名,这可能会带来问题。 此外,还应将生成操作设置为“内容”


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

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

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

  • 右键单击文件夹并选择添加->添加文件
  • 从应用程序项目中选择数据库文件
  • 单击“确定”
  • 在弹出窗口中选择“添加文件链接”
  • 单击“确定”
  • 测试项目现在有一个指向db.sqlite3文件的链接,我们所有的数据库测试都通过了

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


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

    您是否在测试应用程序System.IO.Path.Combine(Environment.CurrentDirectory,“db/sqlite3”)中尝试过;奇怪的是,我经常使用库项目中带有“内容”标记的文件,这很好用。也许因为它是一个可执行的项目,所以它不起作用?然后将db放在一个单独的ios库项目中应该可以解决itah问题,是的,这可能就是区别所在。它以前在一个库项目中,但被重构成可执行文件。在图书馆项目中,它运行得很好。我们把它作为最后的手段搁置一边。