无法为android源代码创建Xamarin组件

无法为android源代码创建Xamarin组件,android,xamarin,msbuild,nuget,Android,Xamarin,Msbuild,Nuget,•我已使用该命令 xamarin-component.exe package C:\cmp\AndroidComponent\component 用于创建Xamarin组件。在构建示例android项目时,显示以下错误。我使用命令xamarin-component.exe package C:\cmp\AndroidComponent\component-verbose详细显示了错误消息 错误消息: C:\程序文件 x86\MSBuild\Xamarin\Android\Xamarin.An

•我已使用该命令

xamarin-component.exe package C:\cmp\AndroidComponent\component 
用于创建Xamarin组件。在构建示例android项目时,显示以下错误。我使用命令xamarin-component.exe package C:\cmp\AndroidComponent\component-verbose详细显示了错误消息

错误消息:

C:\程序文件 x86\MSBuild\Xamarin\Android\Xamarin.Android.Bindings.targets155,2: 错误MSB3644:框架的引用程序集无效 找不到版本为v1.0的MonoAndroid。要解决此问题,请安装 此框架版本的SDK或目标包,或重新定位 应用程序到具有SDK的框架版本 或安装了目标包。请注意,将解析程序集 来自全局程序集缓存GAC,并将用于代替 引用程序集。因此,您的装配可能不正确 针对您想要的框架。 [C:\cmp\AndroidComponent\component\samples\App17\VidyoClientAndroid\VidyoClientAndroid.csproj]

注:

我能够为iOS源代码成功创建Xamarin组件。 •在为Android源代码创建Xamarin组件时,会从64位folderC:\Program Files x86\msbuild\14.0\bin**amd64**\msbuild.exe/p:Configuration=Release C:\cmp\AndroidComponent\component\samples\App17\App17.sln…内部调用msbuild.exe。。。。
•当从路径“C:\Program Files x86\msbuild\14.0\Bin\msbuild.exe”32位显式调用msbuild.exe时,构建成功,同时显式构建android项目。

我们遇到了相同的问题;你很接近正确答案,论坛也有正确答案

首先,让我们看看代码中出错的部分Xamarin.Android.Common.targets;在较新版本的Xamarin中,此代码更为深入:

<Target Name="_GetReferenceAssemblyPaths">
<GetReferenceAssemblyPaths
        TargetFrameworkMoniker="$(TargetFrameworkIdentifier),Version=v1.0"
        RootPath="$(TargetFrameworkRootPath)">
    <Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_XATargetFrameworkDirectories" />
</GetReferenceAssemblyPaths>
通过命令行运行NuGet时,我们看到它正在使用64位MSBuild可执行文件:

MSBuild自动检测:使用“C:\Program Files x86\MSBuild\14.0\bin\amd64”中的MSBuild版本“14.0”

您在上面正确地识别了这一点,但只是为了让后面的人清楚

使用64位版本的MSBuild$TargetFrameworkRootPath时,会将其定义为C:\Program Files\Reference Assembly\Microsoft\Framework,但Xamarin不会将任何框架实用程序安装到该目录;相反,这里的所有内容都存在于x86版本中C:\Program Files x86\Reference Assembly\Microsoft\Framework

当你在线阅读时,很多人通过安装Visual Studio 2017解决了这个问题;但这只是一个转移视线的问题,它之所以有效,是因为它导致NuGet使用Visual Studio 2017附带的MSBuild 15,而该版本显然不受此bug的影响

有几种方法可以解决此问题:

在使用可选的-MSBuildPath参数进行还原时,告诉NuGet使用x86 MSBuild,如下所述 升级到Visual Studio 2017以获得MSBuild 15 将$TargetFrameworkRootPath定义为C:\Program Files x86\Reference Assembly\Microsoft\Framework;这可以随意完成,最大的困难是在执行之前将其设置为环境中的环境变量。注意如果你不小心的话,这可能会导致一系列意想不到的副作用。你可以读到:
$(TargetFrameworkRootPath)