从共享项目中获取嵌入式资源

时间:2018-11-15 19:37:15

标签: c# svg xamarin.forms

我正在使用Xamarin Forms应用程序,该应用程序有两个项目,一个Android应用程序和一个iOS应用程序。其他所有代码都存储在共享项目中。

解决方案如下:

  • MyApp.Android(Android项目),引用MyApp.Base
  • MyApp.iOS(iOS项目),引用MyApp.Base
  • MyApp.Base(共享项目)

我正在使用以下代码从共享项目中读取SVG图像:

using (var stream = GetType().Assembly.GetManifestResourceStream("MyApp.Base.image.svg"))
{
    // do work here...
}

当图像位于Android或iOS项目中时,此方法非常理想,但是我希望共享图像,因此将其放入共享项目中。

GetType()。Assembly返回MyApp.Android,因此找不到图像。我想我正在忽略某些东西,但找不到解决方法。

有人能指出我正确的方向吗?谢谢!

1 个答案:

答案 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