C# iOS和x2B之间是否可以共享资产/资源;机器人项目?

C# iOS和x2B之间是否可以共享资产/资源;机器人项目?,c#,visual-studio,xamarin,xamarin.ios,xamarin.android,C#,Visual Studio,Xamarin,Xamarin.ios,Xamarin.android,我有一个基于Xamarin的Visual Studio 2015项目,其结构如下 MyApp(便携式) 我的机器人 MyApp.iOS 目前,我在MyApp.Droid项目和MyApp.iOS项目中包括资产/资源 例如,myhtml.html与MyApp.Droid/Asserts/myhtml.html和MyApp.iOS/Resources/myhtml.html都是重复的 有什么方法可以避免这种重复吗?假设您使用的是Xamarin表单,是的,您可以使用.net资源文件 您可以在portab

我有一个基于Xamarin的Visual Studio 2015项目,其结构如下

MyApp(便携式) 我的机器人 MyApp.iOS

目前,我在MyApp.Droid项目和MyApp.iOS项目中包括资产/资源

例如,
myhtml.html
与MyApp.Droid/Asserts/myhtml.html和MyApp.iOS/Resources/myhtml.html都是重复的


有什么方法可以避免这种重复吗?

假设您使用的是Xamarin表单,是的,您可以使用.net资源文件

您可以在portable项目中创建一个文件夹,在其中添加内容文件,并将所有这些文件的编译操作设置为Embedded Resource,然后您可以使用.net提供的机制来访问资源,例如(在本例中,我假设代码在portable项目中包含的类中执行,文件存储在名为ResourceFiles的文件夹中):

这样,您就拥有了包含文件内容的流

另外,作为提示,您可以使用自定义标记扩展名从XAML加载这些文件,例如,下面是从.net资源加载图像的标记扩展名:

[ContentProperty ("Source")]
public class ImageResourceExtension : IMarkupExtension
{
    public string Source { get; set; }

    public object ProvideValue (IServiceProvider serviceProvider)
    {
        if (Source == null)
            return null;

        var imageSource = new StreamImageSource { Stream = async (ct) => this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream(Source) }; 

        return imageSource;
    }
}
然后,要在XAML中使用此扩展,您将执行以下操作(local是您自己名称空间的XAML名称空间定义):


假设您使用的是Xamarin表单,是的,您可以使用.net资源文件

您可以在portable项目中创建一个文件夹,在其中添加内容文件,并将所有这些文件的编译操作设置为Embedded Resource,然后您可以使用.net提供的机制来访问资源,例如(在本例中,我假设代码在portable项目中包含的类中执行,文件存储在名为ResourceFiles的文件夹中):

这样,您就拥有了包含文件内容的流

另外,作为提示,您可以使用自定义标记扩展名从XAML加载这些文件,例如,下面是从.net资源加载图像的标记扩展名:

[ContentProperty ("Source")]
public class ImageResourceExtension : IMarkupExtension
{
    public string Source { get; set; }

    public object ProvideValue (IServiceProvider serviceProvider)
    {
        if (Source == null)
            return null;

        var imageSource = new StreamImageSource { Stream = async (ct) => this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream(Source) }; 

        return imageSource;
    }
}
然后,要在XAML中使用此扩展,您将执行以下操作(local是您自己名称空间的XAML名称空间定义):


<Image Source="{local:ImageResource MyNamespace.ResourceFiles.MyImage.png}" />