PCL程序集和读取资源文件

时间:2014-01-18 03:43:16

标签: c# android .net portable-class-library

我正在读取.Net中针对移动平台的文件,因此我正在使用PCL。我注意到如果我添加/更改我的目标平台,我的装配选项会有很大差异。一般来说,在PCL中获得最大装配量的最佳方法是什么?

以下是更具体的内容:我想使用System.Reflection.Assembly.GetExecutingAssembly();System.IO.Path 到目前为止,我只能得到一个或另一个。有人找到了两种方法吗?

这是我要实施的课程:

public class ContentProviderImplementation : IContentProvider
    {
        private static Assembly _CurrentAssembly;
        private Assembly CurrentAssembly
        {
            get
            {
                if (_CurrentAssembly == null)
                {
                    _CurrentAssembly = Assembly.GetExecutingAssembly();
                }
                return _CurrentAssembly;
            }
        }
        public StreamReader LoadContent(string relativePath)
        {
            string localXMLUrl = Path.Combine(Path.GetDirectoryName(CurrentAssembly.GetName().CodeBase), relativePath);
            return new StreamReader(File.OpenRead(new Uri(localXMLUrl).LocalPath));
        }
    }
什么是最好的概念方式(代码细节确定,但我不想直接解决方案,除非它只是在正确的PCL程序集上获得范围)为多个移动平台实现这一点?具体来说:IOS,Android,Windows 8.1和Windows手机。

这是最相关的SO问题的答案:

  

可移植类库允许您使用命名空间和类   存在于您要定位的所有平台中。 .Net 4.5   (假设你的意思是完整的桌面 - WinForms / WPF),Windows 8和   Windows Phone 8都以非常不同的方式进行文件访问,并且有所不同   他们可以使用的文件。可以访问文件的位置也不同   极大地:嵌入内容;嵌入资源;隔离存储;   共享文件夹;完整的文件系统。这些并非全部可用   你提到的所有平台。

     

简短回答。你可能无法做你想做的事。文件系统   各种平台的访问权限差异很大,通常必须如此   对每个平台做不同的事情。你能做的就是定义一个   用于PCL可以进行文件访问(打开,读取,保存等)的界面   使用然后创建您传递给的平台特定实例   PCL根据需要。

相关SO问题的网址:C# PCL Reading from File

另外,我喜欢说我说的话。如果我错误地使用任何编程术语,请告诉我。我是软件界的新手!谢谢你们!

1 个答案:

答案 0 :(得分:4)

  

一般来说,在PCL中获得最大装配量的最佳方法是什么?

这不是关于组件的数量,而是关于您将能够使用的API的更多信息。

通常,您的PCL目标更少平台更多API 您将能够使用。此外,更新您选择的所有平台的版本,更多API

对于完全可重用的库,例如JSON.NET,您可能希望尽可能多地定位平台。但是,应用程序中的PCL使用通常会受到应用程序需求的限制。为了获得最佳体验,请根据您今天所需的平台进行定位,并包括您明天需要的平台,但不要只检查所有方框 - 您只是限制自己。

  

我想使用Assembly.GetExecutingAssembly()

此API已弃用(与Assembly.GetCallingAssembly一样)。并不是说你错过了很多东西。在实例方法中,您只需使用GetType().GetTypeInfo().Assembly即可。在静态方法中,您可以将其替换为typeof(TheTypeYourMethodIsIn).GetTypeInfo().Assembly

请注意GetTypeInfo()是.NET 4.5中添加的新方法。在较旧的平台上,您只需忽略对GetTypeInfo()的调用。有关详细信息,请参阅Evolving the Reflection API上的博客文章。