9

ポータブル クラス ライブラリのターゲット パックを作成するにはどうすればよいですか? http://jpobst.blogspot.com/2012/04/mono-for-android-portable-libraries-in.htmlのアドバイスポータブル クラス ライブラリを使用する monodroid サンプル プログラムを作成することができました。

ただし、入力 PCL のいずれかが System.Net アセンブリを参照している場合、monodroid は apk のパッケージ化に失敗します。System.Net.dll のファイルが見つからないというメッセージが表示されるためです。

私が理解しているように ( http://docs.xamarin.com/android/about/assembliesから)、MonoDroid はすべての System.Net 機能を System.dll 内にバンドルしています。

System.Net を参照するこれらの PCL を MonoDroid に使用させる方法はありますか?

  • この System.net-> System リダイレクトを monodroid パッケージャーに理解させる方法はありますか?
  • または、モノドロイドのためだけに参照を「修正」する、実行できるパッケージ前のステップはありますか?
  • または他の提案はありますか?

技術情報で更新:

現在、パッケージ化プロセスは次のレベルで失敗しています:

"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 タスク内で発生しています。

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

インポート元:

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

1 に答える 1

3

可能な解決策 (MonoDroid が型転送をサポートしていると仮定) は、関連する型を System.dll に型転送する System.Net.dll アセンブリを用意することです。

完全な .NET Framework では、これらの System.Net 型は System.dll にあると思います。.NET 4.0.3 または 4.5 で System.Net.dll を調べると、これらの型のTypeForwardedToAttributesが表示され、それらを許可します。 System.dll にリダイレクトされるポータブル ライブラリ内の System.Net.dll への参照を入力します。Jeremy Likness のブログ投稿シリーズ、Understanding Portable Librariesでは、これがどのように機能するかについて詳しく説明しています。

ポータブル ライブラリ内の参照は、System.Net.dll の完全な厳密な名前を参照します。したがって、秘密鍵を持っていないため、これらの型転送を使用して正しく署名されたアセンブリを自分で作成することはできませんでした。ただし、MonoDroid は厳密な名前または署名の検証を別の方法で処理する場合があります。そのため、MonoDroid が受け入れる型転送を使用して System.Net.dll を生成し、それを MonoDroid アプリケーションにパッケージ化できる場合があります。

于 2012-04-29T05:53:27.653 に答える