簡體   English   中英

PCL程序集和讀取資源文件

[英]PCL Assemblies and Reading Resource Files

我正在讀取.Net中針對移動平台的文件,因此我正在使用PCL。 我注意到,如果我添加/更改目標平台,則我的裝配選項會有很大不同。 通常,在PCL中獲得最大數量的裝配的最佳方法是什么?

這里有一些更具體的內容:我想使用System.Reflection.Assembly.GetExecutingAssembly(); AND 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 Phone。

這是最相關的SO問題的答案:

可移植的類庫使您可以使用所有目標平台中存在的名稱空間和類。 .Net 4.5(假設您的意思是完整的桌面WinForms / WPF),Windows 8和Windows Phone 8所做的文件訪問非常不同,並且具有不同的文件可用。 可以從哪里訪問文件,也有很大不同:嵌入式內容; 嵌入式資源; 隔離存儲; 共享文件夾; 完整的文件系統。 這些功能並非在您提到的所有平台上都可用。

簡短的答案。 您可能無法做自己想做的事。 文件系統訪問在不同平台之間差異很大,對於每個平台通常必須以不同的方式進行。 您可以做的是定義PCL可以使用的文件訪問(打開,讀取,保存等)接口,然后根據需要創建特定於平台的實例,然后將其傳遞給PCL。

相關SO問題的URL: C#PCL從文件讀取

另外,我想表達我的意思。 請告訴我我是否錯誤地使用了任何編程術語。 我對軟件領域很陌生! 多謝你們!

通常,在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 Reflection API

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM