gpt4 book ai didi

msbuild - 是否可以使用在MonoDroid中引用System.Net的可移植类库?

转载 作者:行者123 更新时间:2023-12-04 04:31:37 24 4
gpt4 key购买 nike

根据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示例程序。

但是,如果我的任何输入PCL都引用System.Net程序集,则monodroid无法打包我的apk-因为它提示找不到System.Net.dll的文件。

据我了解(来自http://docs.xamarin.com/android/about/assemblies),MonoDroid将所有System.Net功能捆绑在System.dll中。

有什么办法可以让MonoDroid使用引用System.Net的这些PCL?

  • 有什么方法可以使Monodroid打包程序了解System.net->系统重定向?
  • 还是有一些我可以运行的预打包步骤,可以“纠正”仅适用于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" />

    最佳答案

    一个可能的解决方案(假设MonoDroid支持类型转发)是拥有一个System.Net.dll程序集,该程序集将相关类型转发到System.dll。

    在完整的.NET Framework中,我认为这些System.Net类型位于System.dll中,如果您在.NET 4.0.3或4.5上查看System.Net.dll,则将看到TypeForwardedToAttributes这些类型的类型,这些类型允许在可移植库中键入对System.Net.dll的引用,以将其重定向到System.dll。 Jeremy Likness在Understanding Portable Libraries上的博客文章系列详细介绍了这一切的工作方式。

    可移植库中的引用指的是System.Net.dll的全名。因此,由于您没有私钥,因此无法使用这些类型将自己转发的程序集生成正确签名的程序集。但是,MonoDroid可能会以不同的方式处理强名或签名验证。因此,您可能能够生成具有MonoDroid可以接受的类型转发的System.Net.dll,并将其与您的MonoDroid应用程序打包在一起。

    关于msbuild - 是否可以使用在MonoDroid中引用System.Net的可移植类库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10361457/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com