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

Msbuild 是否可以在MonoDroid中使用引用System.Net的可移植类库?,msbuild,xamarin.android,portable-class-library,Msbuild,Xamarin.android,Portable Class Library,根据和中的建议,我成功地构建了一些使用可移植类库的monodroid示例程序 但是,如果我的任何输入PCL引用System.Net程序集,则monodroid无法打包我的apk,因为它会抱怨System.Net.dll找不到文件 据我(从中)了解,MonoDroid捆绑了System.dll中的所有System.Net功能 有没有办法让MonoDroid使用这些PCL哪个参考系统.Net 我有没有办法让monodroid打包机理解这个System.net->System redirection

根据和中的建议,我成功地构建了一些使用可移植类库的monodroid示例程序

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

据我(从中)了解,MonoDroid捆绑了System.dll中的所有System.Net功能

有没有办法让MonoDroid使用这些PCL哪个参考系统.Net

  • 我有没有办法让monodroid打包机理解这个System.net->System redirection
  • 或者我是否可以运行一些预打包步骤来“纠正”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框架中,我相信那些System.NET类型在System.dll中,如果您查看.NET 4.0.3或4.5上的System.NET.dll,您将看到这些类型,它们允许可移植库中对System.NET.dll的类型引用重定向到System.dll。杰里米·利克内斯(Jeremy Likness)的博客系列文章详细介绍了这一切是如何运作的


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

我已经进行了一个小时的黑客攻击(也尝试了一些MSBuild Xamarin构建任务黑客攻击,但失败了),并且。。。我有一些成功!谢谢将通过推特反馈更多信息我在博客上写了一些注释-当我使用monotouch时,将推到github。。。(目前monodevelop存在的问题!)