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")
我正在将常规 .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")