2012-04-28 6 views
9

Po How can I build a targetting pack for Portable Class Libraries? i porady w http://jpobst.blogspot.com/2012/04/mono-for-android-portable-libraries-in.html udało mi się zbudować kilka przykładowych programów monodroid, które używają przenośnych bibliotek klasy.Czy można użyć przenośnej biblioteki klas, która odwołuje się do System.Net w MonoDroid?

Jeśli jednak któryś z moich wprowadzonych plików PCL odwołuje się do zestawu System.Net, wówczas monodroid nie może spakować pliku apk - ponieważ narzeka na plik Nie znaleziono dla System.Net.dll.

Jak rozumiem (od http://docs.xamarin.com/android/about/assemblies), MonoDroid łączy wszystkie funkcje System.Net wewnątrz System.dll.

Czy istnieje sposób, w jaki mogę uzyskać MonoDroid do korzystania z tych PCL, które odwołują się do System.Net?

  • Czy istnieje sposób, aby uzyskać pakowarkę monodroidów, aby zrozumieć ten System.net-> Przekierowanie systemu?
  • A może jest jakiś krok przed pakietem, który mógłbym uruchomić, który "poprawił" odniesienie dla monodroidu?
  • Lub inne sugestie?

Aktualizacja z informacji technicznych:

Proces pakowania jest obecnie upadającego na poziomie:

"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] 

Dzieje się tak w ramach zadania MSBuild:

<!-- 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> 

importowane z:

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

Odpowiedz

3

Możliwe rozwiązanie (zakładając, że MonoDroid obsługuje przekazywanie typów) ma mieć zestaw System.Net.dll, który przekazuje odpowiednie typy do System.dll.

W pełnym .NET Framework, wierzę, że te typy System.Net są w System.dll, a jeśli spojrzeć w System.Net.dll na .NET 4.0.3 lub 4.5, pojawi się TypeForwardedToAttributes dla tych typów , które pozwalają przekierować te odwołania do System.Net.dll do biblioteki przenośnej do System.dll. Seria postów na blogu Jeremy'ego Liknessa pod tytułem Understanding Portable Libraries opisuje szczegółowo, jak to wszystko działa.

Odwołania w bibliotece przenośnej odnoszą się do pełnej, silnej nazwy System.Net.dll. Nie można więc utworzyć poprawnie podpisanego zestawu z tym typem przekazu, ponieważ nie masz prywatnego klucza. Jednak MonoDroid może obsługiwać silne nazwy lub weryfikację podpisu w inny sposób. Więc możesz być w stanie stworzyć System.Net.dll z typami forwardów, które zaakceptuje MonoDroid, i spakować je za pomocą aplikacji MonoDroid.

+0

Hackowałem przez godzinę (również próbowałem i zawiodłem w niektórych hakach budujących MSBuild Xamarin) i ... mam trochę sukcesów! Dzięki. Przekaże więcej za pośrednictwem Twittera – Stuart

+1

Napisałem kilka notatek na http://slodge.blogspot.co.uk/2012/04/using-portable-library-tools-for.html - popchnę do githubu, kiedy otrzymam monotouch też działa ... (problemy z monodevelop w chwili obecnej!) – Stuart