我正在使用Xamarin Forms应用程序,该应用程序有两个项目,一个Android应用程序和一个iOS应用程序。其他所有代码都存储在共享项目中。
解决方案如下:
我正在使用以下代码从共享项目中读取SVG图像:
using (var stream = GetType().Assembly.GetManifestResourceStream("MyApp.Base.image.svg"))
{
// do work here...
}
当图像位于Android或iOS项目中时,此方法非常理想,但是我希望共享图像,因此将其放入共享项目中。
GetType()。Assembly返回MyApp.Android,因此找不到图像。我想我正在忽略某些东西,但找不到解决方法。
有人能指出我正确的方向吗?谢谢!
答案 0 :(得分:3)
您正在使用共享项目,而不是PCL或.Net Standard库。因此,编译它们时,所有共享项目的内容都将合并到特定于平台的项目中。这意味着-即使将资源嵌入MyApp.Base中,该资源也将合并到.iOS / .Droid项目中。 我建议您进一步了解Shared Project vs PCL或.Net Standard库。 下面的代码;我没有测试过,但这是您应该遵循的方向:
#if __IOS__
var resourcePrefix = "MyApp.iOS.";
#endif
#if __ANDROID__
var resourcePrefix = "MyApp.Android.";
#endif
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(SharedPage)).Assembly;
Stream stream = assembly.GetManifestResourceStream
(resourcePrefix + "image.svg");
有关更多信息,请访问此页面:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/files?tabs=macos#embedding-in-shared-projects