Jas*_*per 4 c# svg xamarin.forms
我正在开发一个 Xamarin Forms 应用程序,它有两个项目,一个 Android 应用程序和一个 iOS 应用程序。所有其他代码都存储在共享项目中。
解决方案如下所示:
我使用以下代码从共享项目中读取 SVG 图像:
using (var stream = GetType().Assembly.GetManifestResourceStream("MyApp.Base.image.svg"))
{
// do work here...
}
Run Code Online (Sandbox Code Playgroud)
当图像位于 Android 或 iOS 项目中时,这非常有效,但我希望共享图像,因此我将其放在共享项目中。
GetType().Assembly 返回 MyApp.Android,因此找不到图像。我想我忽略了一些事情,但我一直无法找到解决方案。
有人能指出我正确的方向吗?谢谢!
您使用的是共享项目而不是 PCL 或 .Net 标准库。因此,当您编译它们时,所有共享项目内容都将合并到特定于平台的项目中。这意味着 - 即使您将资源嵌入到 MyApp.Base 中,该资源也会合并到 .iOS/.Droid 项目中。我建议您了解有关共享项目与 PCL 或 .Net 标准库的更多信息。下面的代码;我没有测试过,但这是你应该遵循的方向:
#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");
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看此页面:https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/files ?tabs=macos#embedding-in-shared-projects