這裏有一對夫婦的想法:
首先,如果你正在手動複製解析代碼更改從項目到項目,你可以通過編寫一個可以將某些文件克隆到另一個項目的腳本來加速該過程。或者你也許可以編寫一個grunt腳本,當它檢測到一個變化時自動複製文件。
現在,這裏是存儲解析代碼在一個項目,但跨平臺是共享的另一種方法:
問題:我用,而不是PCL共享項目的房子我Xamarin.Forms和解析碼。 Parse代碼工作得很好,但是當我在XAML的ContentPage中使用我自己的自定義ContentView時,遇到了一個問題。我想要一個解決方案,可以讓我的自定義ContentView和我的Parse代碼一起工作 - 都來自同一個項目。
解決方案:我已經切換到現在住房我的Xamarin.Forms和解析代碼在PCL。但是有一個小問題。在我解釋捕獲之前,只需知道它的工作方式是否解析代碼複製(除了每個平臺特定項目中的解析初始化代碼的一行外)。
有什麼收穫?問題在於,在您的可移植類庫中,您必須手動交換Parse.iOS.dll或Parse.Android.dll,具體取決於您當時編譯的內容。
它會增加文件大小嗎?編號我使用共享項目(使用平臺項目的參考文獻到Parse DLL)與可移植類庫(您必須在平臺項目中添加對dll的引用以及PCL ),並通過這種方式發現應用程序文件大小沒有增加。
以下是目前正在爲我工作的項目結構(項目名稱已更名爲機密)。 (供參考:我使用Xamarin爲Mac。)
MyProject.iOS
- Reference to Parse.iOS.dll
- Reference to the Portable Class Library
MyProject.Android
- Reference to Parse.iOS.dll
- Reference to the Portable Class Library
Portable Class Library
- Parse Code
- Xamarin Forms Code
- Reference to either Parse.iOS.dll or Parse.Android.dll
重要:當PCL換出的DLL,我發現,如果我用鼠標右鍵單擊引用菜單下的DLL,然後單擊刪除,它在我的項目中導致了問題,在那裏iOS項目不再編譯,因爲它仍然在尋找Parse.Android.dll,反之亦然。我試圖清理解決方案,從解決方案的文件系統中刪除bin和obj文件夾無濟於事。我通過這樣做再次運行它:右鍵單擊引用,單擊編輯引用,然後取消選中一個Parse DLL並選中其他框。但是,之後,我再次嘗試「刪除」方法,並沒有編譯問題。誰知道,也許這個問題會再次出現。
這不會讓人討厭嗎?根據您在不同平臺之間切換的頻率,DLL的手動交換可能會或可能不會令人討厭。不管這是多麼惱人,它不會比有重複的代碼差。 (也許這個交換過程可以通過腳本實現自動化?我認爲如果你使用腳本修改.csproj,你將不得不卸載PCL並重新加載它。任何人在那裏面對挑戰?或者也許有一種方法基於它正在編譯的平臺做DLL的條件引用。想想任何人?)
我希望這有助於。如果你喜歡這些想法比你現在做的更好,請接受這個答案,讓我們知道你決定採取哪條路線。
請注意,在iOS上,當這樣做時,Mono.Android運行時將需要包含在iOS中,導致應用程序大小爲_huge_!也許這不是最好的方式畢竟:( – 2015-03-27 04:39:16
你有沒有找到一個很好的方式使解析工作的iOS和Android沒有重複解析邏輯,並沒有使iOS應用程序巨大? – 2015-05-16 02:15:27
@AnthonyTietjen我們結束了把代碼需要與Parse進行交互,這些類實現了一個在Core中定義的接口,因此,假設我想查詢位於Core的ViewModel中的總銷售數量,我將調用await ISomeParse。 GetNumberOfSales()'.Droid/iOS類中的代碼是相同的(命名空間除外),並且它們實現相同的接口,所以不幸的是存在代碼重複,但它工作得很好。確定其他項目中的其他副本已更新 – 2015-05-20 07:51:27