Xamarin.Android应用程序如何访问将“复制到输出目录”设置为“始终复制”的文件?

时间:2018-08-17 12:57:45

标签: c# .net xamarin.android .net-standard-2.0

我正在将常规.net框架旧版库迁移到.net标准库中。如下图所示,旧版库曾经有一个始终复制到Output文件夹的文件:

enter image description here

在该库中,有一个旧类可以在访问磁盘上的文件之前测试文件夹的存在,如下所示:

namespace Library
{
    public class LegacyClass
    {
        public void AccessFile()
        {
            string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            bool directoryExists = Directory.Exists(Path.Combine(path, "Files"));

            //  It does exist in the Console app. It does not in the Android app.
            // ... And then access the file.
        }
    }
}

虽然它与控制台应用程序一起使用,但在空白的Xamarin应用程序中却不起作用:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    // Set our view from the "main" layout resource
    SetContentView(Resource.Layout.activity_main);

    //  
    var legacyClass = new LegacyClass();

    legacyClass.AccessFile();
}

LegacyClass找不到“文件”文件夹:

enter image description here

问题

Xamarin.Android应用程序如何访问将Copy to Output Directory设置为CopyAlways的文件?

1 个答案:

答案 0 :(得分:1)

您无法做到这一点,但是可以使用嵌入式资源轻松实现目标。

https://developer.xamarin.com/samples/mobile/EmbeddedResources/

相反,您必须将文件添加到csproj,然后可以在该文件的属性中将其生成操作设置为Embedded Resource。 (在解决方案资源管理器中选择文件,然后按F4键。)

在运行时,您可以使用以下命令将Stream返回到您的文件:

Assembly.Load("MyProjectWhichContainsTheFile").GetManifestResourceStream("MyFile.txt")