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

How can a Xamarin.Android application access files that have the Copy to Output Directory set to CopyAlways?

我正在将常规 .net 框架遗留库迁移到 .net 标准库。如下图所示,遗留库曾经有一个文件总是被复制到输出文件夹:

在那个库中,有一个遗留 class 在访问磁盘上的文件之前测试文件夹是否存在,如下所示:

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 无法找到 Files 文件夹:

问题

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

你不能那样做,但你可以使用嵌入式资源轻松实现你的目标。

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

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

在运行时,您可以使用以下内容 returns a Stream 到您的文件:

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