2012-04-28 35 views
9

Theo dõi từ How can I build a targetting pack for Portable Class Libraries? và lời khuyên trong http://jpobst.blogspot.com/2012/04/mono-for-android-portable-libraries-in.html Tôi đã quản lý để xây dựng một số chương trình ví dụ đơn điệu sử dụng Thư viện lớp học di động.Có thể sử dụng Thư viện lớp di động tham chiếu System.Net trong MonoDroid không?

Tuy nhiên, nếu bất kỳ PCL đầu vào nào của tôi tham chiếu đến lắp ráp System.Net, thì monodroid không gói gói ứng dụng của tôi - vì nó than phiền về Tệp Không tìm thấy cho System.Net.dll.

Khi tôi hiểu nó (từ http://docs.xamarin.com/android/about/assemblies), MonoDroid bao gồm tất cả chức năng System.Net bên trong System.dll.

Có cách nào để có thể sử dụng MonoDroid để sử dụng các PCL tham chiếu System.Net này không?

  • Có cách nào để tôi có thể mua trình đóng gói monodroid để hiểu System.net-> Chuyển hướng hệ thống này không?
  • Hoặc là có một số bước trước gói tôi có thể chạy mà sẽ "chính xác" tham chiếu chỉ cho monodroid?
  • Hoặc bất kỳ đề xuất nào khác?

Cập nhật với thông tin kỹ thuật:

Quá trình đóng gói hiện đang thất bại ở cấp độ:

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

này đang xảy ra trong phạm vi nhiệm vụ 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> 

được nhập từ:

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

Trả lời

3

Một giải pháp khả thi (giả định MonoDroid hỗ trợ chuyển tiếp loại) là có lắp ráp System.Net.dll loại chuyển tiếp các loại có liên quan đến System.dll.

Trong Khuôn khổ .NET đầy đủ, tôi tin rằng các kiểu System.Net đó nằm trong System.dll và nếu bạn nhìn vào System.Net.dll trên .NET 4.0.3 hoặc 4.5, bạn sẽ thấy TypeForwardedToAttributes cho các loại đó , cho phép các tham chiếu kiểu đó tới System.Net.dll trong thư viện di động được chuyển hướng đến System.dll. Loạt bài đăng trên blog của Jeremy Likness trên Understanding Portable Libraries đi vào một số chi tiết về cách hoạt động của tất cả.

Tham chiếu trong thư viện di động tham chiếu đến tên đầy đủ của System.Net.dll. Vì vậy, bạn không thể tạo ra một hội đồng được ký tên chính xác với những loại chuyển tiếp cho mình, vì bạn không có khóa riêng. Tuy nhiên, MonoDroid có thể xử lý tên mạnh hoặc xác thực chữ ký khác nhau. Vì vậy, bạn có thể tạo ra một System.Net.dll với kiểu chuyển tiếp mà MonoDroid sẽ chấp nhận và gói nó với ứng dụng MonoDroid của bạn.

+0

Tôi đã hack trong một giờ (cũng đã cố gắng và thất bại tại một số MSBuild Xamarin Build Task hack) và ... Tôi có một số thành công! Cảm ơn. Sẽ báo cáo lại thông qua Twitter – Stuart

+1

Đã viết blog một số ghi chú trên http://slodge.blogspot.co.uk/2012/04/using-portable-library-tools-for.html - sẽ đẩy đến github khi tôi nhận được monotouch làm việc quá ... (vấn đề với phát triển đơn độc hiện nay!) – Stuart

Các vấn đề liên quan