2012-04-28 64 views
9

How can I build a targetting pack for Portable Class Libraries?http://jpobst.blogspot.com/2012/04/mono-for-android-portable-libraries-in.html的建議我已經設法構建了一些使用可移植類庫的monodroid示例程序。是否可以使用在MonoDroid中引用System.Net的可移植類庫?

但是,如果我的任何輸入PCLS的引用System.Net組裝,然後MonoDroid的失敗來包裝我的APK - 因爲它抱怨找不到文件的System.Net.dll。

據我所知(從http://docs.xamarin.com/android/about/assemblies),MonoDroid的捆綁內System.dll中的所有System.Net功能。

有沒有什麼辦法可以讓MonoDroid使用這些參考System.Net的PCL?

  • 有沒有什麼辦法可以讓monodroid打包者瞭解這個System.net->系統重定向?
  • 還是有一些預包裝的步驟,我可以運行,將「糾正」引用只爲monodroid?
  • 還是有其他建議?

    包裝過程目前未能在水平:

    <!-- Find all the assemblies this app requires --> 
    <ResolveAssemblies 
        Assemblies="$(ProjectDir)$(OutDir)$(TargetFileName);@(ReferencePath)" 
        I18nAssemblies="$(MandroidI18n)" 
        LinkMode="$(AndroidLinkMode)" 
        ReferenceAssembliesDirectory="$(TargetFrameworkDirectory)"> 
         <Output TaskParameter="ResolvedAssemblies" ItemName="ResolvedAssemblies" /> 
        <Output TaskParameter="ResolvedUserAssemblies" ItemName="ResolvedUserAssemblies" /> 
        <Output TaskParameter="ResolvedFrameworkAssemblies" ItemName="ResolvedFrameworkAssemblies" /> 
        <Output TaskParameter="ResolvedSymbols" ItemName="ResolvedSymbols" /> 
        </ResolveAssemblies> 
    

    "C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj" (SignAndroidPackage target) (1) -> 
    (_ResolveAssemblies target) -> 
        C:\Program Files (x86)\MSBuild\Novell\Novell.MonoDroid.Common.targets(441,2): error : Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'System.Net, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'. Perhaps it doesn't exist in the Mono for Android profile? [C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj] 
    C:\Program Files (x86)\MSBuild\Novell\Novell.MonoDroid.Common.targets(441,2): error : File name: 'System.Net.dll' [C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj] 
    C:\Program Files (x86)\MSBuild\Novell\Novell.MonoDroid.Common.targets(441,2): error : at Monodroid.Tuner.MonoDroidResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters) [C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj] 
    C:\Program Files (x86)\MSBuild\Novell\Novell.MonoDroid.Common.targets(441,2): error : at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List`1 assemblies, AssemblyDefinition assembly) [C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj] 
    C:\Program Files (x86)\MSBuild\Novell\Novell.MonoDroid.Common.targets(441,2): error : at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List`1 assemblies, AssemblyDefinition assembly) [C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj] 
    C:\Program Files (x86)\MSBuild\Novell\Novell.MonoDroid.Common.targets(441,2): error : at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List`1 assemblies, AssemblyDefinition assembly) [C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj] 
    C:\Program Files (x86)\MSBuild\Novell\Novell.MonoDroid.Common.targets(441,2): error : at Xamarin.Android.Tasks.ResolveAssemblies.Execute() [C:\Projects\Misc\MVVMCROSS\Sample - Tutorial\Tutorial\Tutorial.UI.Droid\Tutorial.UI.Droid.csproj] 
    

    這是MSBuild任務內發生


與技術信息更新

從:

<UsingTask TaskName="Xamarin.Android.Tasks.ResolveAssemblies" AssemblyFile="Novell.MonoDroid.Build.Tasks.dll" /> 

回答

3

一個可能的解決方案(假設MonoDroid支持類型轉發)是有一個System.Net.dll程序集類型轉發相關類型到System.dll。

在完整的.NET框架,我相信那些System.Net類型是在System.dll中,如果你在System.Net.dll看看.NET的4.0.3或4.5,你會看到TypeForwardedToAttributes這些類型,它允許將可移植庫中的System.Net.dll類型引用重定向到System.dll。 Jeremy Likness的關於Understanding Portable Libraries的博客文章系列詳細介紹了這一切如何運作。

便攜庫中的引用是指System.Net.dll的完整強名稱。所以你不能用自己的類型轉發正確簽名的程序集,因爲你沒有私鑰。但是,MonoDroid可能會以不同的方式處理強名稱或簽名驗證。所以你可以用MonoDroid可以接受的類型轉發來生成一個System.Net.dll,並將其與MonoDroid應用程序打包在一起。

+0

我一直在黑客一個小時(也試過,並在一些MSBuild Xamarin構建任務黑客失敗)和...我有一些成功!謝謝。將通過Twitter報告更多 – Stuart 2012-04-29 09:11:50

+1

已經在http://slodge.blogspot.co.uk/2012/04/using-portable-library-tools-for.html上發佈了一些註釋 - 當我獲得monotouch工作時,也會推送給github ...(目前monodevelop的問題!) – Stuart 2012-04-30 13:41:59

相關問題