• 我已经使用了命令
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.targets(155,2):
错误 MSB3644:框架的参考程序集
未找到“MonoAndroid,版本=v1.0”。要解决此问题,请安装
此框架版本的 SDK 或 Targeting Pack 或重新定位您的
应用程序到您拥有 SDK 的框架版本
或已安装目标包。请注意,程序集将被解析
来自全局程序集缓存 (GAC) 并将用于代替
参考组件。因此您的装配可能不正确
针对您想要的框架。
[C:\cmp\AndroidComponent\component\samples\App17\VidyoClientAndroid\VidyoClientAndroid.csproj]
Note:
我能够成功为 iOS 源代码创建 Xamarin 组件。
• 在为 Android 源代码创建 Xamarin 组件时,从内部调用 msbuild.exe64位文件夹(C:\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 bit)在显式构建 android 项目时显式地。
我们遇到了同样的问题;你已经接近正确答案了,而且论坛也有正确答案。
首先让我们看一下出错的代码部分(Xamarin.Android.Common.targets;在较新版本的 Xamarin 中,此代码的位置要低得多):
<Target Name="_GetReferenceAssemblyPaths">
<GetReferenceAssemblyPaths
TargetFrameworkMoniker="$(TargetFrameworkIdentifier),Version=v1.0"
RootPath="$(TargetFrameworkRootPath)">
<Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_XATargetFrameworkDirectories" />
</GetReferenceAssemblyPaths>
这里最重要的部分是
$(TargetFrameworkRootPath)
当通过命令行运行 NuGet 时,我们看到它正在使用 64 位 MSBuild 可执行文件:
MSBuild 自动检测:使用“C:\Program Files (x86)\MSBuild\14.0\bin\amd64”中的 msbuild 版本“14.0”。
(您自己在上面正确地识别了这一点)但只是为了让任何关注的人都清楚。
当您使用 64 位版本的 MSBuild 时$(TargetFrameworkRootPath)
被定义为C:\Program Files\Reference Assemblies\Microsoft\Framework
但是,Xamarin 不会将任何框架实用程序安装到该目录;相反,所有内容都位于 x86 版本中C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework
当你在线阅读时,很多人通过安装 Visual Studio 2017 解决了这个问题;但这是一个转移注意力的话题,它之所以有效,是因为它会导致 NuGet 使用随 Visual Studio 2017 一起提供的 MSBuild 15,而 Visual Studio 2017 显然不受此错误的影响。
有几种方法可以解决此问题:
- 当您使用可选的 -MSBuildPath 参数进行还原时,告诉 NuGet 使用 x86 MSBuild,如此处所述如何告诉 NuGet 使用哪些 MSBuild 可执行文件? https://stackoverflow.com/questions/49822757/how-can-i-tell-nuget-what-msbuild-executable-to-use/49823570#49823570
- 升级到 Visual Studio 2017 以获取 MSBuild 15
- 定义
$(TargetFrameworkRootPath)
to be C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework
;这可以随心所欲地完成,最大的锤子是在执行之前将其设置为环境中的环境变量。请注意,如果您不小心,这可能会导致一系列意想不到的副作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)