C# PCL程序集和读取资源文件

C# PCL程序集和读取资源文件,c#,android,.net,portable-class-library,C#,Android,.net,Portable Class Library,我正在读取.Net中针对移动平台的文件,所以我使用PCL。我注意到,如果我添加/更改我的目标平台,我的组装选项会有很大的变化。一般来说,获得PCL中最大装配量的最佳方法是什么 这里有更具体的内容:我想使用System.Reflection.Assembly.getExecutionGassembly()和System.IO.Path 到目前为止,我只能得到其中一个。有没有人找到一种方法把这两个都弄到手 这就是我要实现的类:public类contentprovider实现:IContentProv

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

这里有更具体的内容:我想使用
System.Reflection.Assembly.getExecutionGassembly()
System.IO.Path
到目前为止,我只能得到其中一个。有没有人找到一种方法把这两个都弄到手

这就是我要实现的类:
public类contentprovider实现:IContentProvider
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));
        }
    }
{
专用静态程序集_CurrentAssembly;
专用程序集当前程序集
{
得到
{
如果(_CurrentAssembly==null)
{
_CurrentAssembly=Assembly.getExecutionGassembly();
}
返回CurrentAssembly;
}
}
公共StreamReader加载内容(字符串相对路径)
{
字符串localXMLUrl=Path.Combine(Path.GetDirectoryName(CurrentAssembly.GetName().CodeBase),relativePath);
返回新的StreamReader(File.OpenRead(新Uri(localXMLUrl.LocalPath));
}
}
在多个移动平台上实现这一点的最佳概念方法是什么(代码细节可以,但我不想要直接的解决方案,除非它只是在正确的PCL程序集上获得范围)?具体来说:IOS、Android、Windows8.1和WindowsPhone

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

可移植类库允许您使用名称空间和类 存在于您所瞄准的所有平台中。净额4.5 (假设您指的是完整的桌面WinForms/WPF)、Windows 8和 Windows Phone 8的文件访问方式都非常不同,并且具有不同的 可供他们使用的文件。可以从何处访问文件也有所不同 大:嵌入内容;嵌入式资源;隔离储存; 共享文件夹;完整的文件系统。这些不是全部都可以在 你提到的所有平台

简短的回答。你可能不能做你想做的事。文件系统 不同平台的访问权限差别很大,通常必须 每个平台的操作都不同。您可以做的是定义一个 PCL可以访问的文件访问接口(打开、读取、保存等) 使用并创建传递给服务器的特定于平台的实例 根据需要进行PCL

相关SO问题的URL:

而且,我喜欢说话算数。请告诉我是否使用了错误的编程术语。我对软件行业还很陌生!谢谢大家

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

这并不是关于程序集的数量,而是关于您将能够使用的API的更多信息

一般来说,PCL目标平台越少,就能使用越多的API。此外,您选择的所有平台的最新版本,以及您将获得的更多API

对于完全可重用的库,如JSON.NET,您可能希望尽可能多地针对平台。然而,应用程序中PCL的使用通常更受应用程序需求的限制。为了获得最佳体验,针对您今天需要的多个平台,包括您知道明天需要的平台,但不要只勾选所有框,您只需限制自己

我想使用
Assembly.getExecutionGassembly()

此API已被弃用(正如
Assembly.GetCallingAssembly
)。并不是说你错过了很多。在实例方法中,您只需使用
GetType().GetTypeInfo().Assembly
。在静态方法中,您可以将其替换为
typeof(您的方法所在的类型)。GetTypeInfo().Assembly

请注意,
GetTypeInfo()
是.NET 4.5中添加的一个新方法。在较旧的平台上,只需省略对
GetTypeInfo()
的调用。有关更多详细信息,请参阅我们的博客文章

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

这并不是关于程序集的数量,而是关于您将能够使用的API的更多信息

一般来说,PCL目标平台越少,就能使用越多的API。此外,您选择的所有平台的最新版本,以及您将获得的更多API

对于完全可重用的库,如JSON.NET,您可能希望尽可能多地针对平台。然而,应用程序中PCL的使用通常更受应用程序需求的限制。为了获得最佳体验,针对您今天需要的多个平台,包括您知道明天需要的平台,但不要只勾选所有框,您只需限制自己

我想使用
Assembly.getExecutionGassembly()

此API已被弃用(正如
Assembly.GetCallingAssembly
)。并不是说你错过了很多。在实例方法中,您只需使用
GetType().GetTypeInfo().Assembly
。在静态方法中,您可以将其替换为
typeof(您的方法所在的类型)。GetTypeInfo().Assembly


请注意,
GetTypeInfo()
是.NET 4.5中添加的一个新方法。在较旧的平台上,只需省略对
GetTypeInfo()
的调用。有关更多详细信息,请参阅我们的博客文章。

我正在使用PCL.Net 4.5配置文件111,在实例方法中我找不到GetTypeInfo(),我是否缺少任何内容?我正在使用PCL.Net 4.5配置文件111,在实例方法中我找不到GetTypeInfo(),我是否缺少任何内容?